From b030109e665301e7edd6ad0fe5c832ee10fe39b4 Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期六, 13 七月 2024 16:48:14 +0800
Subject: [PATCH] 调整出入库补单信息2

---
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java         |   17 
 igds-web/src/main/resources/templates/test/PrintOut5329.html                                                 |   99 +
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java                               |   39 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java           |  822 ++++++++
 igds-web/src/main/resources/templates/test/PrintIn5329.html                                                  |    1 
 igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepot.view.xml                                       |  345 +++
 igds-web/src/main/resources/static/img/areation/5000/pfc_a.png                                               |    0 
 igds-basic/src/main/java/com/ld/igds/timer/zcl/service/impl/InteGrain5328ServiceImpl.java                    |   55 
 igds-web/src/main/resources/static/images/img-fail.jpg                                                       |    0 
 igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/builder/CommandBuild.java                      |   57 
 igds-recir/.gitignore                                                                                        |    1 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java     |   65 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java   |   41 
 igds-inout/src/main/java/com/ld/igds/inout/service/HSettleService.java                                       |  169 +
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java                  |   42 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java               |   62 
 igds-security/src/main/java/com/ld/igds/models/SecSnapDepot.java                                             |   86 
 igds-basic/src/main/java/com/ld/igds/timer/WeatherTimerService.java                                          |  354 +++
 igds-security/src/main/java/com/ld/igds/sec/service/SecSnapDepotService.java                                 |  151 +
 igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepotPR.java                                         |  140 +
 igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/package-info.java                              |    7 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java           |   58 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java |   50 
 igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/util/Dlt645Utils.java                          |   88 
 igds-basic/src/main/java/com/ld/igds/timer/ScheduledBasic.java                                               |   62 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java |   61 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java           |  121 +
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java             |   60 
 igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/RemoteEsServiceImpl.java                       |   73 
 igds-web/src/main/resources/static/css/bootstrap.min.css.map                                                 |    1 
 igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/ClientHandler.java                      |   62 
 igds-security/src/main/java/com/ld/igds/timer/ScheduledSec.java                                              |  174 +
 igds-protocol-zldz/.rules                                                                                    | 1178 ++++++++++++
 igds-protocol-es/pom.xml                                                                                     |   56 
 igds-warn/src/main/java/com/ld/igds/warn/view/SecureManager.view.xml                                         |  460 ++++
 igds-security/src/main/java/com/ld/igds/models/SecSnapConf.java                                              |   55 
 igds-warn/src/main/java/com/ld/igds/warn/service/HSecureManagerService.java                                  |  105 +
 igds-basic/src/main/java/com/ld/igds/timer/zcl/service/impl/InteGrain5332ServiceImpl.java                    |   55 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java               |   55 
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java                       |    6 
 igds-web/src/main/resources/static/img/areation/5000/pfc_b.png                                               |    0 
 igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/analysis/AnalysisService.java                  |   99 +
 igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/Dlt645ClientEngine.java                 |   98 +
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java    |  110 +
 igds-warn/src/main/java/com/ld/igds/warn/view/SecureManagerPR.java                                           |   53 
 igds-web/src/main/resources/static/img/gas/5326/5326_001.png                                                 |    0 
 46 files changed, 5,693 insertions(+), 0 deletions(-)

diff --git a/igds-basic/src/main/java/com/ld/igds/timer/ScheduledBasic.java b/igds-basic/src/main/java/com/ld/igds/timer/ScheduledBasic.java
new file mode 100644
index 0000000..7b36a45
--- /dev/null
+++ b/igds-basic/src/main/java/com/ld/igds/timer/ScheduledBasic.java
@@ -0,0 +1,62 @@
+package com.ld.igds.timer;
+
+import com.bstek.bdf2.core.model.DefaultCompany;
+import com.ld.igds.common.CoreCommonService;
+import com.ld.igds.view.manager.TempManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 鍩虹妯″潡鏍囧噯瀹氭椂鍣ㄤ笟鍔¢厤缃�
+ */
+@Slf4j
+@Component(ScheduledBasic.BEAN_ID)
+public class ScheduledBasic {
+
+    public static final String BEAN_ID = "basic.scheduled";
+
+    @Resource
+    private TempManager thManager;
+    @Resource
+    private CoreCommonService coreCommonService;
+
+    @Resource
+    private WeatherTimerService weatherTimerService;
+
+
+    /**
+     * 姣忛棿闅�30鍒嗛挓鎵ц涓�娆�
+     */
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void scheduled30() {
+
+        //瀹氭椂鑾峰彇鍒嗘満鐨勬俯婀垮害妫�娴嬬粨鏋�
+        doExeTh();
+
+        //瀹氭椂鑾峰彇姘旇薄淇℃伅
+        weatherTimerService.doExe();
+    }
+
+    /**
+     * 瀹氭椂鑾峰彇鍒嗘満鐨勬俯婀垮害妫�娴嬬粨鏋�
+     */
+    private void doExeTh() {
+        List<DefaultCompany> list = coreCommonService.getCompanyList();
+        if (null == list || list.isEmpty()) return;
+
+        try {
+            for (DefaultCompany company : list) {
+                log.info("===================绯荤粺瀹氭椂鑾峰彇鍒嗘満涓嬬殑娓╂箍搴︿俊鎭�-{}=======================", company.getId());
+                thManager.scheduledCheck(company.getId());
+
+                Thread.sleep(500);
+            }
+        } catch (Exception e) {
+            e.getStackTrace();
+        }
+    }
+}
diff --git a/igds-basic/src/main/java/com/ld/igds/timer/WeatherTimerService.java b/igds-basic/src/main/java/com/ld/igds/timer/WeatherTimerService.java
new file mode 100644
index 0000000..44b2ce3
--- /dev/null
+++ b/igds-basic/src/main/java/com/ld/igds/timer/WeatherTimerService.java
@@ -0,0 +1,354 @@
+package com.ld.igds.timer;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ld.igds.constant.Constant;
+import com.ld.igds.constant.RedisConst;
+import com.ld.igds.data.ConfigData;
+import com.ld.igds.io.constant.ProtocolEnum;
+import com.ld.igds.models.WeatherConf;
+import com.ld.igds.models.WeatherInfo;
+import com.ld.igds.timer.rk.RkData;
+import com.ld.igds.timer.rk.RkDto;
+import com.ld.igds.timer.rk.RkResult;
+import com.ld.igds.util.HttpUtils;
+import com.ld.igds.util.RedisUtil;
+import com.ld.igds.weather.CoreWeatherService;
+import com.ld.igds.weather.WeatherUtil;
+import com.ld.igds.weather.notify.NotifyWeatherService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author: andy.jia
+ * @description: 姘旇薄淇℃伅鑾峰彇瀹氭椂鍣�
+ * @version: <p>
+ * <p>
+ * 椋庢鑷磋繙璐拱澶栫綉姘旇薄鏈嶅姟锛�
+ * 姘旇薄鏈嶅姟锛歨ttp://www.yiketianqi.com/
+ *
+ *
+ * <p> 寤哄ぇ浠佺鐨�4G鍗忚
+ */
+@Slf4j
+@Component
+public class WeatherTimerService {
+
+    @Resource(name = NotifyWeatherService.BEAN_ID)
+    private NotifyWeatherService notifyService;
+
+    @Resource(name = CoreWeatherService.BEAN_ID)
+    private CoreWeatherService weatherService;
+
+    @Autowired
+    private ConfigData configData;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private RestTemplate restTemplate;
+
+    public static String DEFAULT_URL = "https://v0.yiketianqi.com/api?unescape=1&version=v61&appid=49421971&appsecret=JmJE48Fv&cityid={cityid}";
+    public static String DEFAULT_APP_ID = "49421971";
+    public static String DEFAULT_APP_SECRET = "JmJE48Fv";
+
+    /**
+     * 寤哄ぇ浠佺4G骞冲彴缂撳瓨key
+     */
+    public static String RK_WEATHER_V30_4G = "RK_WEATHER_V30_4G";
+
+
+    /**
+     * 瀹氭椂鑾峰彇姘旇薄淇℃伅锛岃娉ㄦ剰锛岀敱浜庢皵璞℃敮鎸佸缃戝拰鑷畾涔夋皵璞$珯锛岀郴缁熼粯璁ゅ彧鎵ц鍏朵腑涓�绉嶆柟寮�
+     */
+    public void doExe() {
+
+        log.info("===========================绯荤粺瀹氭椂鑾疯幏鍙栨皵璞′俊鎭�======================");
+
+        // 鑾峰彇姘旇薄淇℃伅閰嶇疆
+        List<WeatherConf> list = weatherService.getConfData(null, null);
+
+        if (null == list || list.isEmpty()) return;
+
+        Date date = new Date();
+
+        for (WeatherConf conf : list) {
+
+            if (null == conf.getWanTag()) conf.setWanTag(Constant.YN_N);
+            if (null == conf.getProtocol()) conf.setProtocol(ProtocolEnum.TCP_DEFAULT.getCode());
+
+
+            //璋冪敤椋庢鑷磋繙榛樿澶栫綉姘旇薄
+            if (Constant.YN_Y.equals(conf.getWanTag())) {
+                getWeatherByWeb(date, conf);
+                continue;
+            }
+
+            //璋冪敤寤哄ぇ浠佺鐨勬皵璞�
+            if (ProtocolEnum.RK_WEATHER_V30.getCode().equals(conf.getProtocol())) {
+                getWeatherByRkV30(date, conf);
+                continue;
+            }
+
+
+        }
+    }
+
+    /**
+     * 绯荤粺璋冪敤椋庢鑷磋繙璐拱鐨勫缃戝ぉ姘旀皵璞″崗璁�
+     *
+     * @param date
+     * @param conf
+     * @return
+     */
+    public WeatherInfo getWeatherByWeb(Date date, WeatherConf conf) {
+
+        if (StringUtils.isEmpty(conf.getCityId())) return null;
+
+        try {
+
+            if (null != configData.getWeatherPath()) {
+                DEFAULT_URL = configData.getWeatherPath();
+            }
+
+            String url = DEFAULT_URL.replace("{cityid}", conf.getCityId())
+                    .replace("{appid}", DEFAULT_APP_ID)
+                    .replace("{appsecret}", DEFAULT_APP_SECRET);
+
+            log.info("姘旇薄璋冪敤鑾峰彇-url = {}", url);
+
+            String result = HttpUtils.doGet(url);
+            if (null == result) {
+                log.error("褰撳墠澶栫綉鑾峰彇姘旇薄淇℃伅澶辫触鈥︹��");
+                return null;
+            }
+
+            WeatherWebDto dto = JSON.parseObject(result, WeatherWebDto.class);
+
+            if (StringUtils.isNotEmpty(dto.getErrcode())) {
+                log.error("褰撳墠澶栫綉鑾峰彇姘旇薄淇℃伅寮傚父:{}", dto.getErrmsg());
+                return null;
+            }
+            log.info("姘旇薄杩斿洖缁撴灉={}", dto.toString());
+
+            WeatherInfo info = new WeatherInfo();
+            info.setId(WeatherUtil.buildWeatherId(conf.getDeptId(), date));
+            info.setAirLevel(dto.getAir_level());
+            info.setCompanyId(conf.getCompanyId());
+            info.setDeptId(conf.getDeptId());
+            info.setHumidity(dto.getHumidity());
+            info.setPm25(dto.getAir_pm25());
+            info.setPressure(dto.getPressure());
+            info.setSource(WeatherUtil.SOURCE_02);
+            info.setTemp(dto.getTem());
+            info.setWeather(dto.getWea());
+            info.setWindDirection(dto.getWin());
+            info.setWindSpeed(dto.getWin_speed());
+            info.setWindMeter(dto.getWin_meter());
+            info.setCity(dto.getCity());
+            info.setUpdateTime(date);
+
+            notifyService.notify(info);
+            return info;
+        } catch (Exception e) {
+            log.error("姘旇薄淇℃伅鑾峰彇寮傚父:{}", e.getMessage(), e);
+        }
+        return null;
+    }
+
+    /**
+     * 鏍规嵁寤哄ぇ浠佺浜慥30鍗忚鑾峰彇姘旇薄淇℃伅
+     *
+     * @param date
+     * @param conf
+     */
+    private void getWeatherByRkV30(Date date, WeatherConf conf) {
+
+        //鑻ョ敤鎴枫�佸瘑鐮併�両P鍦板潃鏈変竴涓虹┖鍒欒繑鍥�
+        if (StringUtils.isEmpty(conf.getAccount())
+                || StringUtils.isEmpty(conf.getPassword())
+                || StringUtils.isEmpty(conf.getIp())) {
+            return;
+        }
+
+        //鑾峰彇韬唤璁よ瘉token
+        String token = getToken(conf);
+
+        //璁剧疆璇锋眰澶村弬鏁�
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.set("authorization", token);
+
+        String url = conf.getIp() + "/api/data/getRealTimeData";
+        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        HttpEntity<String> ans = restTemplate.exchange(url, HttpMethod.GET,
+                new HttpEntity<>(null, httpHeaders), String.class);
+        String body = ans.getBody();
+        log.debug("-----褰撳墠寤哄ぇ浠佺骞冲彴鑾峰彇姘旇薄淇℃伅-----锛岃繑鍥炴暟鎹�={}", body);
+        RkResult response = JSONObject.parseObject(body, RkResult.class);
+        if (StringUtils.isEmpty(response.getCode()) || !"1000".equals(response.getCode())) {
+            log.error("褰撳墠寤哄ぇ浠佺骞冲彴鑾峰彇姘旇薄淇℃伅澶辫触......");
+            return;
+        }
+        List<JSONObject> result = JSON.parseArray(JSONObject.toJSONString(response.getData()), JSONObject.class);
+
+        JSONArray lists = (JSONArray) result.get(0).get("dataItem");
+        List<RkDto> list = JSON.parseArray(JSONObject.toJSONString(lists), RkDto.class);
+        if (null == list || list.isEmpty()) {
+            return;
+        }
+        WeatherInfo info = new WeatherInfo();
+        info.setId(WeatherUtil.buildWeatherId(conf.getDeptId(), date));
+        info.setCompanyId(conf.getCompanyId());
+        info.setDeptId(conf.getDeptId());
+        info.setSource(WeatherUtil.SOURCE_01);
+
+        List<RkData> dataList;
+        List<RkData> weatherList = new ArrayList<>();
+        //鏍规嵁鍦板潃鍒ゆ柇閫夐」
+        for (RkDto rkDto : list) {
+            //娓╂箍搴�
+            if ("11".equals(rkDto.getNodeId())) {
+                dataList = rkDto.getRegisterItem();
+                for (RkData rkData : dataList) {
+                    //娓╁害
+                    if ("1".equals(rkData.getRegisterId())) {
+                        info.setTemp(rkData.getData());
+                    }
+                    //婀垮害
+                    if ("2".equals(rkData.getRegisterId())) {
+                        info.setHumidity(rkData.getData());
+                    }
+                }
+            }
+            //椋庡姏椋庨��
+            if ("1".equals(rkDto.getNodeId())) {
+                dataList = rkDto.getRegisterItem();
+                for (RkData rkData : dataList) {
+                    //椋庡姏
+                    if ("1".equals(rkData.getRegisterId())) {
+                        info.setWindSpeed(rkData.getData() + "绾�");
+                    }
+                    //椋庨��
+                    if ("2".equals(rkData.getRegisterId())) {
+                        info.setWindMeter(rkData.getData());
+                    }
+                }
+            }
+            //椋庡悜
+            if ("2".equals(rkDto.getNodeId())) {
+                dataList = rkDto.getRegisterItem();
+                for (RkData rkData : dataList) {
+                    //椋庡悜
+                    if ("1".equals(rkData.getRegisterId())) {
+                        info.setWindDirection(rkData.getData());
+                    }
+                }
+            }
+            //澶ф皵鍘�
+            if ("14".equals(rkDto.getNodeId())) {
+                dataList = rkDto.getRegisterItem();
+                for (RkData rkData : dataList) {
+                    //澶ф皵鍘�
+                    if ("2".equals(rkData.getRegisterId())) {
+                        info.setPressure(rkData.getData());
+                    }
+                }
+            }
+            //闆ㄩ噺
+            if ("21".equals(rkDto.getNodeId())) {
+                dataList = rkDto.getRegisterItem();
+                for (RkData rkData : dataList) {
+//                    //鐬椂闆ㄩ噺
+//                    if("1".equals(rkData.getRegisterId())){
+//                        info.setRainfall(rkData.getData());
+//                    }
+                    //褰撳墠闆ㄩ噺
+                    if ("2".equals(rkData.getRegisterId())) {
+                        info.setRainfall(rkData.getData());
+                    }
+                }
+            }
+            //鏈夋棤闆ㄩ洩
+            if ("16".equals(rkDto.getNodeId())) {
+                weatherList = rkDto.getRegisterItem();
+            }
+        }
+        for (RkData rkData : weatherList) {
+            //澶╂皵
+            if ("1".equals(rkData.getRegisterId())) {
+                info.setWeather(rkData.getData());
+                //鏈夐洦闆椂鍒ゆ柇褰撳墠闆ㄩ噺
+                if ("鏈夐洦闆�".equals(rkData.getData())) {
+                    Double rainfall = Double.valueOf(info.getRainfall());
+                    if (rainfall <= 10) {
+                        info.setWeather("灏忛洦");
+                    }
+                    if (rainfall > 10 && rainfall <= 25) {
+                        info.setWeather("涓洦");
+                    }
+                    if (rainfall > 25 && rainfall <= 50) {
+                        info.setWeather("澶ч洦");
+                    }
+                    if (rainfall > 50) {
+                        info.setWeather("鏆撮洦");
+                    }
+                }
+            }
+        }
+        info.setUpdateTime(date);
+        info.setCity(conf.getCity());
+        notifyService.notify(info);
+    }
+
+    /**
+     * 鑾峰彇韬唤璁よ瘉鐨勬巿鏉僡ccessToken
+     *
+     * @param conf
+     * @return
+     */
+    private String getToken(WeatherConf conf) {
+        //榛樿鍏堜粠缂撳瓨鑾峰彇
+        String key = RedisConst.buildKey(conf.getCompanyId(), RK_WEATHER_V30_4G, conf.getAccount());
+        String token = (String) redisUtil.get(key);
+
+        //鑻ョ紦瀛樿幏鍙栦负绌猴紝鍒欓�氳繃鎺ュ彛鑾峰彇token
+        if (null == token) {
+            String url = conf.getIp() + "/api/getToken?loginName=" + conf.getAccount() + "&password=" + conf.getPassword();
+            RkResult response = restTemplate.getForObject(url, RkResult.class);
+            if (null == response) {
+                log.error("褰撳墠寤哄ぇ浠佺骞冲彴鑾峰彇韬唤璁よ瘉淇℃伅澶辫触...");
+                return null;
+            }
+            log.info("鑾峰彇鐨勮韩浠借璇佷俊鎭�={}", response);
+
+            if (StringUtils.isEmpty(response.getCode()) || !"1000".equals(response.getCode())) {
+                log.error("褰撳墠寤哄ぇ浠佺骞冲彴鑾峰彇韬唤璁よ瘉淇℃伅澶辫触......");
+                return null;
+            }
+            JSONObject result = JSON.parseObject(JSONObject.toJSONString(response.getData()));
+            if (null == result) {
+                return null;
+            }
+            token = (String) result.get("token");
+
+            //灏唗oken瀛樺叆缂撳瓨,
+            redisUtil.set(key, token, 2 * 60 * 60);
+        }
+        return token;
+    }
+
+
+}
diff --git a/igds-basic/src/main/java/com/ld/igds/timer/zcl/service/impl/InteGrain5328ServiceImpl.java b/igds-basic/src/main/java/com/ld/igds/timer/zcl/service/impl/InteGrain5328ServiceImpl.java
new file mode 100644
index 0000000..9653816
--- /dev/null
+++ b/igds-basic/src/main/java/com/ld/igds/timer/zcl/service/impl/InteGrain5328ServiceImpl.java
@@ -0,0 +1,55 @@
+package com.ld.igds.timer.zcl.service.impl;
+
+import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
+import com.ld.igds.models.InteGrain5328;
+import com.ld.igds.timer.zcl.dto.InteGrainDto;
+import com.ld.igds.timer.zcl.service.InteGrainService;
+import org.hibernate.Session;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Desc: 5328 鎺ュ彛
+ * @author: czt
+ * @update-time: 2023/10/19
+ */
+@Component
+public class InteGrain5328ServiceImpl extends HibernateDao implements InteGrainService {
+
+    @Override
+    public String getCompanyId() {
+        return "5328";
+    }
+
+    @Override
+    public void toSaveGrain(InteGrainDto dto) {
+        Session session = this.getSessionFactory().openSession();
+        try {
+
+            InteGrain5328 data = new InteGrain5328();
+
+            data.setUuid(dto.getUuid());
+            data.setBatchId(dto.getBatchId());
+            data.setCompanyId(dto.getCompanyId());
+            data.setDepotId(dto.getDepotId());
+            data.setDepotName(dto.getDepotName());
+            data.setHumidityIn(dto.getHumidityIn());
+            data.setHumidityOut(dto.getHumidityOut());
+            data.setTempIn(dto.getTempIn());
+            data.setTempOut(dto.getTempOut());
+            data.setReceiveDate(dto.getReceiveDate());
+            data.setTempList(dto.getTempList());
+
+            data.setCheckUser(dto.getCheckUser());
+            data.setCable(dto.getCable());
+            data.setCableCir(dto.getCableCir());
+            data.setRemark(dto.getRemark());
+            data.setWeather(dto.getWeather());
+
+
+            session.saveOrUpdate(data);
+        } finally {
+            session.flush();
+            session.close();
+        }
+    }
+}
diff --git a/igds-basic/src/main/java/com/ld/igds/timer/zcl/service/impl/InteGrain5332ServiceImpl.java b/igds-basic/src/main/java/com/ld/igds/timer/zcl/service/impl/InteGrain5332ServiceImpl.java
new file mode 100644
index 0000000..e39f8b2
--- /dev/null
+++ b/igds-basic/src/main/java/com/ld/igds/timer/zcl/service/impl/InteGrain5332ServiceImpl.java
@@ -0,0 +1,55 @@
+package com.ld.igds.timer.zcl.service.impl;
+
+import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
+import com.ld.igds.models.InteGrain5332;
+import com.ld.igds.timer.zcl.dto.InteGrainDto;
+import com.ld.igds.timer.zcl.service.InteGrainService;
+import org.hibernate.Session;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Desc: 5332 鎺ュ彛
+ * @author: czt
+ * @update-time: 2023/10/19
+ */
+@Component
+public class InteGrain5332ServiceImpl extends HibernateDao implements InteGrainService {
+
+    @Override
+    public String getCompanyId() {
+        return "5332";
+    }
+
+    @Override
+    public void toSaveGrain(InteGrainDto dto) {
+        Session session = this.getSessionFactory().openSession();
+        try {
+
+            InteGrain5332 data = new InteGrain5332();
+
+            data.setUuid(dto.getUuid());
+            data.setBatchId(dto.getBatchId());
+            data.setCompanyId(dto.getCompanyId());
+            data.setDepotId(dto.getDepotId());
+            data.setDepotName(dto.getDepotName());
+            data.setHumidityIn(dto.getHumidityIn());
+            data.setHumidityOut(dto.getHumidityOut());
+            data.setTempIn(dto.getTempIn());
+            data.setTempOut(dto.getTempOut());
+            data.setReceiveDate(dto.getReceiveDate());
+            data.setTempList(dto.getTempList());
+
+            data.setCheckUser(dto.getCheckUser());
+            data.setCable(dto.getCable());
+            data.setCableCir(dto.getCableCir());
+            data.setRemark(dto.getRemark());
+            data.setWeather(dto.getWeather());
+
+
+            session.saveOrUpdate(data);
+        } finally {
+            session.flush();
+            session.close();
+        }
+    }
+}
diff --git a/igds-inout/src/main/java/com/ld/igds/inout/service/HSettleService.java b/igds-inout/src/main/java/com/ld/igds/inout/service/HSettleService.java
new file mode 100644
index 0000000..cb0d6e3
--- /dev/null
+++ b/igds-inout/src/main/java/com/ld/igds/inout/service/HSettleService.java
@@ -0,0 +1,169 @@
+package com.ld.igds.inout.service;
+
+import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
+import com.bstek.dorado.data.provider.Page;
+import com.ld.igds.check.dto.CheckItemData;
+import com.ld.igds.constant.RedisConst;
+import com.ld.igds.m.InoutManageUtil;
+import com.ld.igds.models.*;
+import com.ld.igds.models.InoutSettle;
+import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.DateUtil;
+import com.ld.igds.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.hibernate.Session;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class HSettleService extends HibernateDao {
+
+    public static final String BEAN_ID = "hSettleServiceImpl";
+
+    public static final String CACHE_SETTLE_ID = "SETTLE_ID";
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    public void pageList(Page<InoutSettle> page, Map<String, Object> param)
+            throws Exception {
+
+        String hql = " from " + InoutSettle.class.getName()
+                + " where companyId =:companyId and deptId =:deptId";
+        Map<String, Object> args = new HashMap<String, Object>();
+        args.put("companyId", ContextUtil.getCompanyId());
+        args.put("deptId", ContextUtil.subDeptId(null));
+
+        if (null != param) {
+            String str = (String) param.get("depotId");
+            if (StringUtils.isNotEmpty(str)) {
+                hql += " and depotId=:depotId ";
+                args.put("depotId", str);
+            }
+
+            str = (String) param.get("contractId");
+            if (StringUtils.isNotEmpty(str)) {
+                hql += " and contractId=:contractId ";
+                args.put("contractId", str);
+            }
+
+            str = (String) param.get("bizType");
+            if (StringUtils.isNotEmpty(str)) {
+                hql += " and bizType=:bizType ";
+                args.put("bizType", str);
+            }
+
+            Date date = (Date) param.get("start");
+            if (null != date) {
+                hql += " and payTime >= :start ";
+                args.put("start", DateUtil.getCurZero(date));
+            }
+
+            date = (Date) param.get("end");
+            if (null != date) {
+                hql += " and payTime <= :end ";
+                args.put("end", DateUtil.getNextZero(date));
+            }
+
+        }
+        String countHql = "select count(*) " + hql;
+        hql += " order by id desc ";
+        this.pagingQuery(page, hql, countHql, args);
+    }
+
+
+    public void saveData(InoutSettle data) {
+        Session session = this.getSessionFactory().openSession();
+        if (StringUtils.isEmpty(data.getCompanyId())) {
+            data.setCompanyId(ContextUtil.getCompanyId());
+        }
+        if (StringUtils.isEmpty(data.getDeptId())) {
+            data.setDeptId(ContextUtil.subDeptId(null));
+        }
+        if (null == data.getPayTime()) {
+            data.setPayTime(new Date());
+        }
+        try {
+            data.setUpdateTime(new Date());
+            if (StringUtils.isEmpty(data.getId())) {
+                String id = createId(data.getPayTime(), data.getCompanyId());
+                data.setId(id);
+                session.save(data);
+            } else {
+                session.update(data);
+            }
+        } finally {
+            session.flush();
+            session.close();
+        }
+    }
+
+    public void delData(InoutSettle data) {
+        Session session = this.getSessionFactory().openSession();
+        try {
+            if (null != data.getId()) {
+                session.delete(data);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            session.flush();
+            session.close();
+        }
+    }
+
+    public String createId(Date date, String companyId) {
+        // 鏃堕棿鎴虫爣绛�
+        String timeKey = DateFormatUtils.format(date, "yyyyMMdd");
+
+        // 浠庣紦瀛樹腑鑾峰彇宸叉湁鐨勭粍缁囩紪鐮�
+        String cacheKey = RedisConst.buildKey(companyId, this.CACHE_SETTLE_ID);
+
+        String cacheId = (String) redisUtil.get(cacheKey);
+
+        if (null != cacheId && cacheId.indexOf(timeKey) >= 0) {
+            String temp = cacheId.substring(cacheId.length() - 4);
+            Integer i = Integer.valueOf(temp);
+            i++;
+            cacheId = timeKey + String.format("%04d", i);
+        } else {
+            Map<String, Object> args = new HashMap<>();
+            args.put("timeKey", timeKey + "%");
+            List<InoutSettle> result = getMaxId(args);
+
+            if (null == result || result.size() == 0) {
+                cacheId = timeKey + "0001";
+            } else {
+                String temp = result.get(0).getId();
+                String tempNum = temp.substring(temp.length() - 4);
+                Integer i = Integer.valueOf(tempNum);
+                cacheId = timeKey + String.format("%04d", ++i);
+            }
+        }
+        // 鏇存柊缂撳瓨
+        redisUtil.set(cacheKey, cacheId);
+
+        return cacheId;
+    }
+
+    public List<InoutSettle> getMaxId(Map<String, Object> param) {
+
+        String hql = "from " + InoutSettle.class.getName() + " where 1 = 1 ";
+        Map<String, Object> args = new HashMap<String, Object>();
+        if (null != param) {
+            String str = (String) param.get("timeKey");
+            if (StringUtils.isNotEmpty(str)) {
+                hql += " and id like :timeKey";
+                args.put("timeKey", str);
+            }
+        }
+        hql += " order by  id desc ";
+        return this.query(hql, args);
+    }
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java
new file mode 100644
index 0000000..49ffe2a
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java
@@ -0,0 +1,39 @@
+package com.ld.igds.protocol.beibo;
+
+import com.ld.igds.data.ConfigData;
+import com.ld.igds.protocol.beibo.grainv1.server.BeiboGrainV1ServerEngine;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * 閰嶇疆闅忕郴缁熻嚜鍔ㄥ惎鍔ㄦ湇鍔� -- 鎵ц椤哄簭20-29
+ */
+@Component(ServerRunner.BEAN_ID)
+@Order(value = 25)
+public class ServerRunner implements CommandLineRunner {
+
+    public static final String BEAN_ID = "beibo.serverRunnerV1";
+
+    @Autowired
+    private ConfigData configData;
+
+    @Autowired
+    private BeiboGrainV1ServerEngine beiboGrainV1ServerEngine;
+
+    @Override
+    public void run(String... strings) throws Exception {
+
+        if (configData.getActive().indexOf("pro") >= 0) {
+
+            beiboGrainV1ServerEngine.start(BeiboGrainV1ServerEngine.PORT);
+        }
+        if (configData.getActive().indexOf("dev") >= 0) {
+            beiboGrainV1ServerEngine.start(BeiboGrainV1ServerEngine.PORT);
+        }
+        if (configData.getActive().indexOf("uat") >= 0) {
+            beiboGrainV1ServerEngine.start(BeiboGrainV1ServerEngine.PORT);
+        }
+    }
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java
new file mode 100644
index 0000000..f2269d8
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java
@@ -0,0 +1,60 @@
+package com.ld.igds.protocol.beibo.grainv1;
+
+import com.ld.igds.io.RemoteGrainService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.constant.ProtocolEnum;
+import com.ld.igds.io.request.CheckGrainRequest;
+import com.ld.igds.io.response.GrainResponse;
+import com.ld.igds.protocol.beibo.grainv1.builder.CommandBuild;
+import com.ld.igds.protocol.beibo.grainv1.server.BeiboGrainV1ServerEngine;
+import com.ld.io.api.InvokeResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 璐濆崥绮儏鍒嗘満鍗忚
+ *
+ * @author czt
+ */
+@Slf4j
+@Component(RemoteGrainServiceImpl.BEAN_ID)
+public class RemoteGrainServiceImpl implements RemoteGrainService {
+
+    public static final String BEAN_ID = "beiboGrain.remoteGrainService";
+
+    @Autowired
+    private BeiboGrainV1ServerEngine beiboGrainV1ServerEngine;
+
+    @Override
+    public String getProtocol() {
+        return ProtocolEnum.TCP_BEIBO_GRAIN_V1.getCode();
+    }
+
+    @Override
+    public GrainResponse checkGrain(CheckGrainRequest request) {
+        try {
+            //鐢熸垚绮儏鍛戒护
+            String hexStr = CommandBuild.getInstance().getMsgCheck(request.getSerId());
+
+            // 鍙戦�佸懡浠�
+            InvokeResult result = beiboGrainV1ServerEngine.pushByMin(hexStr);
+
+            log.error("骞冲彴------>>>>鍒嗘満锛氱伯鎯呮娴�-{}", hexStr);
+
+            // 灏佽杩斿洖淇℃伅
+            if (InvokeResult.SUCCESS == result) {
+                return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+                        "绮儏閲囬泦鍛戒护鍙戦�佹垚鍔燂紒");
+            } else {
+                log.error("骞冲彴------>>>>鍒嗘満锛氱伯鎯呮娴�-澶辫触{}", result.getMessage());
+                return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                        "鍛戒护鍙戦�佸紓甯革細" + result.getMessage());
+            }
+
+        } catch (Exception e) {
+            log.error("绮儏妫�娴嬪紓甯革細{}", e);
+            return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庣寮傚父锛�" + e.getMessage());
+        }
+    }
+}
\ No newline at end of file
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java
new file mode 100644
index 0000000..9124cae
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java
@@ -0,0 +1,822 @@
+package com.ld.igds.protocol.beibo.grainv1.analysis;
+
+import com.ld.igds.common.CoreCommonService;
+import com.ld.igds.common.CoreSerService;
+import com.ld.igds.constant.BizType;
+import com.ld.igds.constant.Constant;
+import com.ld.igds.constant.DepotType;
+import com.ld.igds.grain.GrainUtil;
+import com.ld.igds.grain.dto.GrainItemInfo;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.notify.NotifyGrainInvoker;
+import com.ld.igds.models.DepotConf;
+import com.ld.igds.models.DeviceSer;
+import com.ld.igds.models.DicSysConf;
+import com.ld.igds.models.Grain;
+import com.ld.igds.order.ExeOrderService;
+import com.ld.igds.order.data.ExeRequest;
+import com.ld.igds.protocol.beibo.grainv1.builder.ReMessage;
+import com.ld.igds.protocol.beibo.grainv1.builder.ReMessageBuilder;
+import com.ld.igds.protocol.beibo.grainv1.util.BeiboGrainServerUtils;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.NumberUtil;
+import com.ld.igds.warn.WarnUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+/**
+ * 鍗忚瑙f瀽
+ *
+ * @author czt
+ */
+@Slf4j
+@Component(AnalysisService.BEAN_ID)
+public class AnalysisService {
+
+    public static final String BEAN_ID = "beiboGrain.analysisService";
+
+    @Autowired
+    private CoreSerService coreSerService;
+    @Autowired
+    private CoreCommonService commonService;
+    @Autowired
+    private NotifyGrainInvoker notifyGrainInvoker;
+    @Autowired
+    private GrainUtil grainUtil;
+    @Autowired
+    private WarnUtils warnUtils;
+    @Autowired
+    private ExeOrderService exeOrderService;
+
+    public static String result = "";
+
+    public static double ERROR_CHECK_TAG = -100.0;
+
+    public static double FAULT_CHECK_TAG = 85.0;
+
+    public static double ERROR_CHECK_TAG2 = 50;
+    public static String ERROR_HEX = "FFFF";
+
+    public static double MAX_TEMP = -50.0;
+    public static double MIN_TEMP = 50.0;
+
+    /*
+    * 00000000FFEB90FEAA41D821DD21DB21DE21DE21DA21DD21DE21DC21DC21DC21DC21DB21D821D721CE21D121DD21DC21DF21DE21DE21DD21DA21DD21D921DD21DC21DA21D921D921D721D521D321DD21DE21DF21DC21DF21DC21DA21DD21DD21DD21DC21DC21DC21DB21D821D721D121DC21DF21DF21DD21DD21DA21DE21DD21DC21DE21DB21D821DA21DB21D821D721D321DE21E021DD21DF21DF21DE21DB21DC21DF21DF21DD21DF21DB21DC21DB21FFFFFFFFDA21DC21D721DB21DB21DA21DB21D421DB21D921DC21D821D921D621D321FFFFFFFFDF21E021DE21DE21DB21DD21DC21E021DF21DD21DD21DC21DC21DC21DA21FFFFFFFFD921DD21DD21DE21DB21DD21DA21DB21DF21DD21DC21DB21DB21DB21D921FFFFFFFFDD21DC21DE21DD21DE21DC21DB21DC21DE21DE21DC21DC21DB21D921D921FFFFFFFFE021DD21DB21E021DF21DB21DB21D821DE21DE21DD21DD21DB21DB21DB21FFFFFFFFE021E021E021E221DC21DE21DF21DD21DD21DF21DF21DB21DC21DD21DC21FFFFFFFFE221E321E321E521E421DF21E321E321E321E521E321E121D921DE21FFFFFFFFFFFFE321E421E321E621E521E321E621E021E521E321E221E321DF21DE21FFFFFFFFFFFFE421E621E521E521E621E321E521E121E621E121E321E421E121DE21FFFFFFFFFFFFE621E421E521E521E521E321E521E421E121E321E521E321DF21E021FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40013D10101039014110101010101010101000000000000000E5113500031A4C
+    *
+    * 00000000FFEB90FEAA
+    * 41
+    * D821DD21DB21DE21DE21DA21DD21DE21DC21DC21DC21DC21DB21D821D721CE21D121
+    * DD21DC21DF21DE21DE21DD21DA21DD21D921DD21DC21DA21D921D921D721D521D321
+    * DD21DE21DF21DC21DF21DC21DA21DD21DD21DD21DC21DC21DC21DB21D821D721D121
+    * DC21DF21DF21DD21DD21DA21DE21DD21DC21DE21DB21D821DA21DB21D821D721D321
+    * DE21E021DD21DF21DF21DE21DB21DC21DF21DF21DD21DF21DB21DC21DB21FFFFFFFF
+    * DA21DC21D721DB21DB21DA21DB21D421DB21D921DC21D821D921D621D321FFFFFFFF
+    * DF21E021DE21DE21DB21DD21DC21E021DF21DD21DD21DC21DC21DC21DA21FFFFFFFF
+    * D921DD21DD21DE21DB21DD21DA21DB21DF21DD21DC21DB21DB21DB21D921FFFFFFFF
+    * DD21DC21DE21DD21DE21DC21DB21DC21DE21DE21DC21DC21DB21D921D921FFFFFFFF
+    * E021DD21DB21E021DF21DB21DB21D821DE21DE21DD21DD21DB21DB21DB21FFFFFFFF
+    * E021E021E021E221DC21DE21DF21DD21DD21DF21DF21DB21DC21DD21DC21FFFFFFFF
+    *
+    * E221E321E321E521E421DF21E321E321E321E521E321E121D921DE21FFFFFFFFFFFF
+    * E321E421E321E621E521E321E621E021E521E321E221E321DF21DE21FFFFFFFFFFFF
+    * E421E621E521E521E621E321E521E121E621E121E321E421E121DE21FFFFFFFFFFFF
+    * E621E421E521E521E521E321E521E421E121E321E521E321DF21E021FFFFFFFFFFFF
+    * FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+    * 40013D 101010 390141 101010101010101010
+    * 00000000000000E51135
+    * 00031A4C
+    *
+    *
+    *
+    *
+    *
+    * */
+    /**
+     *
+     *
+     * @param hexStr
+     */
+    public void analysis(String ip, int port, String hexStr) {
+
+        result += hexStr;
+        if (result.length() < 1066 * 2) {
+            log.info("鍒嗘満------->>骞冲彴锛屾姤鏂囬暱搴︿笉澶燂紝绛夊緟涓嬩竴鍖呮暟鎹�");
+            return;
+        }
+
+        try {
+
+
+            //灏佽鏁版嵁
+            ReMessage reMessage = ReMessageBuilder.getInstance().buildMessage(result);
+            reMessage.setIp(ip);
+            reMessage.setPort(port);
+            log.info("鍒嗘満------->>骞冲彴锛氱伯鎯呭畬鏁存姤鏂囦俊鎭�={}", reMessage);
+            result = "";
+            if (!BeiboGrainServerUtils.MSG_START.startsWith(reMessage.getStartStr())) {
+                log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ細鎶ユ枃璧峰绗�={}閿欒锛屼笉瑙f瀽", reMessage.getStartStr());
+                return;
+            }
+
+            //鏍规嵁鍒嗘満鍦板潃鑾峰彇鍒嗘満淇℃伅
+            DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), reMessage.getSerId());
+            if (ser == null) {
+                log.error("鍒嗘満-------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ紝鏈幏鍙栧埌绯荤粺绮儏涓绘満閰嶇疆锛�" + reMessage.getSerId());
+                return;
+            }
+
+            List<ExeRequest> list = exeOrderService.getInProgressOrderBySerId(BizType.GRAIN.getCode(), ser.getId());
+            if (null == list || list.isEmpty()) {
+                String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒版墍灞炰粨搴撲俊鎭��";
+                log.error("鍒嗘満------>>>骞冲彴锛�" + info);
+                notifyGrainInvoker.notifyWeb(ser.getCompanyId(), OrderRespEnum.MSG_ERROR, BizType.GRAIN, info);
+                return;
+            }
+
+            ExeRequest exeRequest = list.get(0);
+            log.info("鑾峰彇绮儏鍛戒护淇℃伅={}", exeRequest);
+            if (null == exeRequest) {
+                String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍘嗗彶鍛戒护銆�";
+                log.error("璐濆崥鍒嗘満------>>>骞冲彴锛�" + info);
+                return;
+            }
+
+            DepotConf depotConf = commonService.getCacheDepotConf(exeRequest.getCompanyId(), exeRequest.getDepotId());
+            if (null == depotConf) {
+                String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒扮伯鎯呭弬鏁伴厤缃俊鎭��";
+                log.error("鍒嗘満------>>>骞冲彴锛�" + info);
+                notifyGrainInvoker.notifyWeb(ser.getCompanyId(),
+                        OrderRespEnum.MSG_ERROR, BizType.GRAIN, info);
+                return;
+            }
+
+            // 棣栧厛鑾峰彇鍒扮郴缁熷弬鏁帮紝鍒ゆ柇鏄惁闇�瑕佹壒娆¤嚜鍔ㄤ紭鍖�
+            DicSysConf sysConf = commonService.getCacheSysConf(ser.getCompanyId());
+
+            reMessage.setCompanyId(ser.getCompanyId());
+            analysisGrain(depotConf, reMessage, ser, exeRequest, sysConf);
+        } catch (Exception e) {
+            result = "";
+            log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭紓甯革細鍘熷洜={}", e.toString());
+        }
+    }
+
+
+    private void analysisGrain(DepotConf depotConf, ReMessage reMessage, DeviceSer ser, ExeRequest exeRequest, DicSysConf sysConf) {
+        // 绮儏鐨勬壒娆″彿閲嶆柊鏍规嵁棰戠巼璋冩暣
+        reMessage.setBatchId(ContextUtil.getBatchIdByFireq(depotConf.getGrainFreq()));
+        String grainStr = reMessage.getGrainStr();
+
+        log.debug("{}-{}=鏀跺埌鐨勭伯鎯呬俊鎭�={}", ser.getCompanyId(), ser.getName(), grainStr);
+
+
+        analysisStep0(depotConf, reMessage, ser, exeRequest, sysConf);
+
+        log.info("鍒嗘満------>>>骞冲彴锛氬懡浠ょ被鍨�=8817--绮儏鍏ㄩ儴鏀跺埌锛屽紑濮嬭В鏋�-{}-{}",
+                ser.getCompanyId(), ser.getName());
+    }
+
+    private void analysisStep0(DepotConf depotConf, ReMessage reMessage,
+                               DeviceSer ser, ExeRequest exeRequest, DicSysConf sysConf) {
+
+        List<DepotConf> depotConfs = null;
+
+        // 涓�鍒嗘満澶氫粨锛屾妸璧峰鍒楁斁鍒版渶澶ц繘琛岄噰闆�
+        if (Constant.YN_Y.equals(sysConf.getGrainMoreTag())) {
+            depotConfs = commonService.getCacheDepotConfBySerId2(
+                    depotConf.getCompanyId(), ser.getId());
+        }
+
+        if (null == depotConfs) {// 涓�涓垎鏈�1涓粨
+            if (DepotType.TYPE_02.getCode().equals(depotConf.getDepotType())) {
+                analysisStep2(depotConf, ser, exeRequest, reMessage, sysConf);
+            } else if (DepotType.TYPE_04.getCode().equals(depotConf.getDepotType())) {
+                analysisStep2(depotConf, ser, exeRequest, reMessage, sysConf);
+            } else {
+                analysisStep1(depotConf, ser, exeRequest, reMessage, sysConf);
+            }
+
+            return;
+        }
+
+        // 涓�鍒嗗嚑澶氫粨鎯呭喌锛岃�冭檻鍗曚粨閲囬泦鍜屽浠撻噰闆�
+
+        // 鎵归噺閲囬泦鎵�鏈夊叧鑱斾竴璧烽噰闆嗭紝閬嶅巻鎵ц
+        for (DepotConf depotConfTemp : depotConfs) {
+            if (DepotType.TYPE_02.getCode().equals(depotConfTemp.getDepotType())) {
+                analysisStep2(depotConfTemp, ser, exeRequest, reMessage, sysConf);
+            } else if (DepotType.TYPE_04.getCode().equals(depotConfTemp.getDepotType())) {
+                analysisStep2(depotConfTemp, ser, exeRequest, reMessage, sysConf);
+            } else {
+                analysisStep1(depotConfTemp, ser, exeRequest, reMessage, sysConf);
+            }
+        }
+    }
+
+    /**
+     * 鍦嗙瓛浠撶殑绮儏瑙f瀽
+     *
+     * @param depotConf
+     * @param ser
+     * @param exeRequest
+     * @param reMessage
+     */
+    private void analysisStep2(DepotConf depotConf,
+                               DeviceSer ser, ExeRequest exeRequest,
+                               ReMessage reMessage, DicSysConf sysConf) {
+        if (StringUtils.isEmpty(depotConf.getCableRule())
+                || StringUtils.isEmpty(depotConf.getCableCir())) {
+            log.error("鍒嗘満------>>>骞冲彴锛氬綋鍓嶄粨搴擄細{}-{}锛屾病鏈夋病鏈夐厤缃竷绾胯鍒欙紝鏃犳硶瑙f瀽绮儏淇℃伅鈥︹��",
+                    ser.getCompanyId(), depotConf.getDepotName());
+            return;
+        }
+
+        String[] cableRuleAtt = depotConf.getCableRule().split("-");
+        String[] cableCirAtt = depotConf.getCableCir().split("-");
+
+        if (cableRuleAtt.length != cableCirAtt.length) {
+            log.error("鍒嗘満------>>>骞冲彴锛氬綋鍓嶄粨搴擄細{}-{}锛屽竷绾胯鍒欎笉姝g‘锛屾棤娉曡В鏋愮伯鎯呬俊鎭�︹��", ser.getCompanyId(), depotConf.getDepotName());
+            return;
+        }
+
+
+        //閬垮厤绌烘寚閽�
+        if (null == depotConf.getCableCone()) depotConf.setCableCone(Constant.CABLE_CONE_0);
+
+        // 鑾峰彇鏈�澶х殑灞傞厤缃�--榛樿姣忎竴鍦堥兘涓�鏍�
+        int layMax = Integer.valueOf(cableCirAtt[0]);
+        for (int i = 0; i < cableCirAtt.length; i++) {
+            if (Integer.valueOf(cableCirAtt[i]) >= layMax) layMax = Integer.valueOf(cableCirAtt[i]);
+        }
+
+        //绮儏淇℃伅
+        String strPoints = reMessage.getGrainStr();
+
+        log.info("------绛掍粨绮儏鎶ユ枃={}------", strPoints);
+
+        int sumNum = 0, cableZ = 1;  // sumNum 鍏卞灏戞牴鐢电紗锛沜ableZ 灞傜殑鏈�澶у�硷紝閿ュ舰浠撹ˉ榻愭渶澶у眰
+
+        for (int i = 0; i < cableCirAtt.length; i++) {
+            if (Integer.valueOf(cableCirAtt[i]) > cableZ) {
+                cableZ = Integer.valueOf(cableCirAtt[i]);
+            }
+            sumNum += Integer.valueOf(cableRuleAtt[i]);
+        }
+        int cableZTemp = 1;// 褰撳墠浠撶殑鏈�澶у眰
+        cableZTemp = cableZ;
+        //鍒ゆ柇鏈�澶у眰璺熷垎鏈虹殑灞傛暟鏄惁涓�鑷�
+        if(cableZ < ser.getCableZ()){
+            cableZ = ser.getCableZ();
+        }
+
+        // 鏍规嵁灞傝鍒楄幏鍙栨寚瀹氶暱搴�
+        int start = 4 * (depotConf.getCableStart() - ser.getCableStart()) * cableZ;
+        int len = 4 * cableZ * sumNum;
+
+        strPoints = strPoints.substring(start, start + len);
+        log.info("鍒嗘満------>>>骞冲彴锛氳繑鍥炵伯鎯呭畬鏁翠俊鎭紝鎵�灞炵粍缁�={}锛屽垎鏈�={}", ser.getCompanyId(), ser.getName());
+
+        // 灏嗙伯鎯呰В鏋愭垚鏁扮粍
+        List<Double> temps = new ArrayList<>();
+        double tempValue;
+        String temp;
+        int symbol = 0; //绗﹀彿浣�
+        int num = 0; //鏍囪瑙f瀽鐨勫眰鏁�
+        for (int i = 0; i < strPoints.length() / 4; i++) {
+            if(num == cableZ){
+                num = 0;
+            }
+            if(num < cableZTemp){
+                temp = strPoints.substring(i * 4, i * 4 + 4);
+                if (temp == null) {
+                    temp = "0000";
+                }
+                //楂樹綆浣嶈浆鎹㈠悗杞负16浣嶄簩杩涘埗瀛楃涓�
+                temp = BytesUtil.tran_LH(temp);
+                if(ERROR_HEX.equals(temp)){
+                    tempValue = Constant.ERROR_TEMP;
+                }else {
+                    //10杩涘埗杞�16浣嶇殑2杩涘埗
+                    temp = BytesUtil.hexString2binaryString(temp, 16);
+                    //绗﹀彿浣�
+                    symbol = Integer.valueOf(temp.substring(0, 1));
+                    //鑾峰彇娓╁害鍊�
+                    tempValue = BytesUtil.biannary2Decimal(temp.substring(6)) * 0.0625;
+                    //鑻ヤ负璐燂紝鍒欒ˉ鐮侊細鍙栧弽鍔�1
+                    if (symbol == 1) {
+                        tempValue = ((~BytesUtil.biannary2Decimal(temp.substring(6))) + 1) * 0.0625;
+                    }
+                    tempValue = NumberUtil.keepPrecision(tempValue, 1);
+                }
+
+                //闈炴甯稿��
+                if (tempValue > ERROR_CHECK_TAG2) {
+                    tempValue = Constant.ERROR_TEMP;
+                }
+
+                // 鏁呴殰鍊煎鐞�
+                if (tempValue >= FAULT_CHECK_TAG) {
+                    tempValue = Constant.FAULT_TEMP;
+                }
+                temps.add(tempValue);
+            }
+            num ++;
+        }
+
+        log.debug("-------CheckGrainRequest--={}", exeRequest.toString());
+
+        // 灏嗛泦鍚堣В鏋愭垚鍧愭爣鏁版嵁
+        addPoint2(temps, reMessage, depotConf, exeRequest, sysConf);
+    }
+
+    /**
+     * 鑾峰彇褰撳墠璺熸墍鍦ㄥ湀
+     *
+     * @param curRoot
+     * @param cableRuleAtt
+     * @return
+     */
+    private int getCurCir(int curRoot, String[] cableRuleAtt) {
+
+        int sum = 0;
+        for (int i = 0; i < cableRuleAtt.length; i++) {
+            sum += Integer.valueOf(cableRuleAtt[i]);
+            if (curRoot <= sum) return i + 1;
+        }
+
+        return 1;
+    }
+
+    /**
+     * 骞虫柟浠撶殑瑙f瀽锛岃В鏋愰渶瑕佽�冭檻褰撳墠鏄惁鍚敤鐨勪竴鍒嗘満澶氫粨
+     *
+     * @param depotConf
+     * @param ser
+     * @param exeRequest
+     * @param reMessage
+     */
+    private void analysisStep1(DepotConf depotConf, DeviceSer ser,
+                               ExeRequest exeRequest, ReMessage reMessage, DicSysConf sysConf) {
+        // 绮儏淇℃伅
+        String strPoints = reMessage.getGrainStr();
+
+        String[] attCable = depotConf.getCableRule().split("-");
+        int cableZ = Integer.valueOf(attCable[0]);
+        int cableY = Integer.valueOf(attCable[1]);
+        int cableX = Integer.valueOf(attCable[2]);
+
+        // 鏍规嵁灞傝鍒楄幏鍙栨寚瀹氶暱搴�
+        int start = 4 * (depotConf.getCableStart() - ser.getCableStart())
+                * cableZ * cableY;
+        int len = 4 * cableZ * cableY * cableX;
+
+        log.info("鍒嗘満------>>>骞冲彴锛氳繑鍥炵伯鎯呭畬鏁翠俊鎭紝鎵�灞炵粍缁�={}锛屽垎鏈�={}", ser.getCompanyId(), ser.getName());
+
+        strPoints = strPoints.substring(start, start + len);
+
+        // 灏嗙伯鎯呰В鏋愭垚鏁扮粍
+        List<Double> temps = new ArrayList<>();
+        double tempValue;
+        String temp;
+        int symbol = 0;
+        for (int i = 0; i < strPoints.length() / 4; i++) {
+            temp = strPoints.substring(i * 4, i * 4 + 4);
+            //楂樹綆浣嶈浆鎹㈠悗杞负16浣嶄簩杩涘埗瀛楃涓�
+            temp = BytesUtil.tran_LH(temp);
+            if (temp == null) {
+                temp = "0000";
+            }
+
+            if(ERROR_HEX.equals(temp)){
+                tempValue = Constant.ERROR_TEMP;
+            }else {
+                //10杩涘埗杞�16浣嶇殑2杩涘埗
+                temp = BytesUtil.hexString2binaryString(temp, 16);
+                //绗﹀彿浣�
+                symbol = Integer.valueOf(temp.substring(0, 1));
+                //鑾峰彇娓╁害鍊�
+                tempValue = BytesUtil.biannary2Decimal(temp.substring(6)) * 0.0625;
+                //鑻ヤ负璐燂紝鍒欒ˉ鐮侊細鍙栧弽鍔�1
+                if (symbol == 1) {
+                    tempValue = ((~BytesUtil.biannary2Decimal(temp.substring(6))) + 1) * 0.0625;
+                }
+                tempValue = NumberUtil.keepPrecision(tempValue, 1);
+            }
+
+            // 璇存槑瑙f瀽鐨勬暟鎹湁闂
+            if (tempValue == ERROR_CHECK_TAG || tempValue == ERROR_CHECK_TAG2) {
+                tempValue = Constant.ERROR_TEMP;
+            }
+            // 鏁呴殰鍊煎鐞�
+            if (tempValue >= FAULT_CHECK_TAG) {
+                tempValue = Constant.FAULT_TEMP;
+            }
+            temps.add(tempValue);
+        }
+
+        log.debug("-------CheckGrainRequest--={}", exeRequest.toString());
+
+        // 灏嗛泦鍚堣В鏋愭垚鍧愭爣鏁版嵁
+        addPoint1(temps, reMessage, depotConf, ser, exeRequest, sysConf);
+    }
+
+    /**
+     * 骞虫埧浠擄紝瑙f瀽绗簩姝ワ紝瑙f瀽鍒板潗鏍囨暟鎹�
+     *
+     * @param temps
+     * @throws Exception
+     */
+    private void addPoint1(List<Double> temps, ReMessage msg,
+                           DepotConf depotConf, DeviceSer ser, ExeRequest exeRequest,
+                           DicSysConf sysConf) {
+
+        //鏍规嵁鐢电紗璧峰鏂逛綅鍜屽竷绾挎柟鍚戯紝瀵圭伯鎯呮暟鎹繘琛岃皟鏁�
+        if (null != depotConf.getStartOrientation()) {
+            temps = reversalGrainPoint(temps, depotConf);
+        }
+
+        //鑻ヨ捣鐐圭偣浣嶄负搴曢儴锛屽垯灏嗙伯鎯呮暟鎹繘琛岀炕杞�
+        if (null != depotConf.getStartPoint()
+                && Constant.GRAIN_START_POINT_BELOW.equals(depotConf.getStartPoint())) {
+            temps = grainUtil.reversalUpAndDown(temps, depotConf.getCableRule());
+        }
+
+        //鑻ラ厤缃眰琛岃浆鎹紝鍒欏皢绮儏鏁版嵁杩涜灞傝杞崲
+        if (StringUtils.isNotEmpty(depotConf.getStartConvert())) {
+            temps = convertGrainPoint(temps, depotConf);
+            String[] cableRule = depotConf.getCableRule().split("-");
+            //杞崲灞傝鍒楅厤缃�
+            if (Constant.GRAIN_CONVERT_CLOCKWISE.equals(depotConf.getStartConvert())
+                    || Constant.GRAIN_CONVERT_ANTICLOCKWISE.equals(depotConf.getStartConvert())) {
+                depotConf.setCableRule(Integer.valueOf(cableRule[1]) + "-" + Integer.valueOf(cableRule[0]) + "-" + Integer.valueOf(cableRule[2]));
+            }
+        }
+
+        String[] attCable = depotConf.getCableRule().split("-");
+        int cableZ = Integer.valueOf(attCable[0]);
+        int cableY = Integer.valueOf(attCable[1]);
+        int cableX = Integer.valueOf(attCable[2]);
+
+        Grain grain = new Grain();
+        grain.setDepotId(depotConf.getDepotId());
+        grain.setCompanyId(depotConf.getCompanyId());
+        grain.setCable(depotConf.getCableRule());
+        grain.setBatchId(msg.getBatchId());
+
+        int humidity = -100;
+        int tem = -100;
+        String substring = "";
+
+        //瑙f瀽浠撳唴娓╀粨鍐呮箍
+        int thConf = Integer.valueOf(depotConf.getThConf());
+        int start = 0, end = 6;
+        if(thConf > 1){
+            start += 6*thConf; //12-18
+            end += start;
+        }
+        String thStr = msg.getThStr().substring(start, end);
+        humidity = BytesUtil.hexToInt(thStr.substring(0, 2));
+        grain.setHumidityIn(humidity * 1.0);
+        substring = thStr.substring(2);
+        tem = BytesUtil.hexToInt(substring);
+        grain.setTempIn(tem * 0.1);
+        if(substring.startsWith("1")){
+            grain.setTempIn(tem * -0.1);
+        }
+
+        grain.setReceiveDate(new Date());
+        grain.setRemark("绮俯姝e父");
+
+        // 鑾峰彇缂撳瓨涓殑鍛戒护淇℃伅
+        grain.setCheckUser(exeRequest.getExeUser());
+
+        double max = MAX_TEMP, min = MIN_TEMP, sumT = 0.0, sumNum = cableX
+                * cableY * cableZ;
+
+        // 鏍¢獙鍜屽疄鐜扮粺璁★紝鐢熸垚閲囬泦鐐逛俊鎭�
+        List<GrainItemInfo> listGrainItems = new ArrayList<>();
+        int i = 1;
+        for (Double temp : temps) {
+            if (temp == Constant.ERROR_TEMP || temp == Constant.FAULT_TEMP || temp == Constant.ADD_TEMP) {
+                sumNum--;
+            } else {
+                sumT += temp;
+                if (temp > max) {
+                    max = temp;
+                }
+                if (temp < min) {
+                    min = temp;
+                }
+            }
+            listGrainItems.add(new GrainItemInfo(i, temp));
+            i++;
+        }
+
+        if (sumNum == 0) {
+            sumNum = 1;
+            grain.setRemark("褰撳墠绮儏閲囬泦寮傚父");
+        }
+        //杩囨护姣旇緝鐢ㄧ殑鏈�澶ф渶灏忓��
+        if (max == MAX_TEMP) {
+            max = 0.0;
+        }
+        if (min == MIN_TEMP) {
+            min = 0.0;
+        }
+        if (null != depotConf.getTempMax() && max > depotConf.getTempMax()) {
+            grain.setRemark("浠撳簱閰嶇疆楂樻俯璀﹀憡鍊硷細" + depotConf.getTempMax() + "锛屽綋鍓嶆娴嬮珮娓╁�硷細"
+                    + max);
+            warnUtils.addGrainWarn(depotConf, grain);
+        }
+
+        grain.setTempAve(sumT / sumNum);
+        grain.setTempMax(max);
+        grain.setTempMin(min);
+        grain.setPoints(StringUtils.join(temps, ","));
+
+        String depotIds = exeRequest.getDepotIds();
+
+        boolean notifyWeb = true;
+        if (null != depotIds && depotIds.indexOf(depotConf.getDepotId()) == -1) {
+            notifyWeb = false;
+        }
+        // 鐢ㄦ埛灏佽濂芥暟鎹嵆鍙�
+        notifyGrainInvoker.analysisSuccess(grain, listGrainItems, depotConf,
+                sysConf, notifyWeb, exeRequest);
+    }
+
+    /**
+     * 鍦嗙瓛浠撹В鏋愭楠�
+     *
+     * @param temps
+     * @param msg
+     * @param depotConf
+     * @param exeRequest
+     */
+    private void addPoint2(List<Double> temps, ReMessage msg,
+                           DepotConf depotConf, ExeRequest exeRequest,
+                           DicSysConf sysConf) {
+
+        Grain grain = new Grain();
+        grain.setDepotId(depotConf.getDepotId());
+        grain.setCompanyId(depotConf.getCompanyId());
+        grain.setCable(depotConf.getCableRule());
+        grain.setCableCir(depotConf.getCableCir());
+        grain.setBatchId(msg.getBatchId());
+
+        int humidity = -100;
+        int tem = -100;
+        String substring = "";
+
+        //瑙f瀽浠撳唴娓╀粨鍐呮箍
+        int thConf = Integer.valueOf(depotConf.getThConf());
+        int start = 0, end = 6;
+        if(thConf > 1){
+            start += 6*thConf; //12-18
+            end += start;
+        }
+        String thStr = msg.getThStr().substring(start, end);
+        humidity = BytesUtil.hexToInt(thStr.substring(0, 2));
+        grain.setHumidityIn(humidity * 1.0);
+        substring = thStr.substring(2);
+        tem = BytesUtil.hexToInt(substring);
+        grain.setTempIn(tem * 0.1);
+        if(substring.startsWith("1")){
+            grain.setTempIn(tem * -0.1);
+        }
+
+        grain.setReceiveDate(new Date());
+        grain.setRemark("绮俯姝e父");
+        grain.setCheckUser(exeRequest.getExeUser());
+
+        double max = MAX_TEMP, min = MIN_TEMP, sumT = 0.0;
+
+        int sumNum = temps.size();
+        List<GrainItemInfo> listGrainItems = new ArrayList<>();
+        int i = 1;
+        for (Double temp : temps) {
+            if (temp == Constant.ERROR_TEMP || temp == Constant.FAULT_TEMP || temp == Constant.ADD_TEMP) {
+                sumNum--;
+            } else {
+                sumT += temp;
+                if (temp > max) {
+                    max = temp;
+                }
+                if (temp < min) {
+                    min = temp;
+                }
+            }
+            listGrainItems.add(new GrainItemInfo(i, temp));
+            i++;
+        }
+
+        if (sumNum == 0) {
+            sumNum = 1;
+            grain.setRemark("褰撳墠绮儏閲囬泦寮傚父");
+        }
+        //杩囨护姣旇緝鐢ㄧ殑鏈�澶ф渶灏忓��
+        if (max == MAX_TEMP) {
+            max = 0.0;
+        }
+        if (min == MIN_TEMP) {
+            min = 0.0;
+        }
+        if (null != depotConf.getTempMax() && max > depotConf.getTempMax()) {
+            grain.setRemark("浠撳簱閰嶇疆楂樻俯璀﹀憡鍊硷細" + depotConf.getTempMax() + "锛屽綋鍓嶆娴嬮珮娓╁�硷細"
+                    + max);
+            warnUtils.addGrainWarn(depotConf, grain);
+        }
+
+        grain.setTempAve(sumT / sumNum);
+        grain.setTempMax(max);
+        grain.setTempMin(min);
+        grain.setPoints(StringUtils.join(temps, ","));
+        //鍒ゆ柇鏄惁鏄敟褰粨锛屾槸鐨勮瘽杩涜閿ュ舰浠撹ˉ鐐�
+        if(StringUtils.isNotEmpty(depotConf.getCableCone())){
+            //涓婇敟褰㈣ˉ鐐�
+            if(Constant.CABLE_CONE_1.equals(depotConf.getCableCone())){
+                grain.setPoints(upConePoints(depotConf, grain.getPoints()));
+            }
+            //涓嬮敟褰㈣ˉ鐐�
+            if(Constant.CABLE_CONE_2.equals(depotConf.getCableCone())){
+                grain.setPoints(downConePoints(depotConf, grain.getPoints()));
+            }
+        }
+
+        String depotIds = exeRequest.getDepotIds();
+        boolean notifyWeb = true;
+        if (null != depotIds && depotIds.indexOf(depotConf.getDepotId()) == -1) {
+            notifyWeb = false;
+        }
+
+        // 鐢ㄦ埛灏佽濂芥暟鎹嵆鍙�
+        notifyGrainInvoker.analysisSuccess(grain, listGrainItems, depotConf,
+                sysConf, notifyWeb, exeRequest);
+    }
+
+    private List<Double> convertGrainPoint(List<Double> temps, DepotConf conf) {
+        if (Constant.GRAIN_CONVERT_DEFAULT.equals(conf.getStartConvert())) {
+            //鑻ュ眰琛岃浆鎹负榛樿锛屽垯鐩存帴杩斿洖
+            return temps;
+        }
+
+        //椤烘椂閽堣浆鎹�
+        if (Constant.GRAIN_CONVERT_CLOCKWISE.equals(conf.getStartConvert())) {
+            return grainUtil.convertRight(temps, conf.getCableRule());
+        }
+        //閫嗘椂閽堣浆鎹�
+        if (Constant.GRAIN_CONVERT_ANTICLOCKWISE.equals(conf.getStartConvert())) {
+            return grainUtil.convertLeft(temps, conf.getCableRule());
+        }
+
+        return temps;
+    }
+
+    private List<Double> reversalGrainPoint(List<Double> temps, DepotConf conf) {
+        if (StringUtils.isEmpty(conf.getStartOrientation())) {
+            //鑻ヨ捣濮嬫柟浣嶄负绌猴紝鍒欓粯璁よ捣濮嬫柟浣嶅拰鏂瑰悜锛岀洿鎺ヨ繑鍥�
+            return temps;
+        }
+        //璧峰鏂逛綅涓哄彸杈规椂
+        if (Constant.GRAIN_START_ORIENTATION_RIGHT.equals(conf.getStartOrientation())) {
+            if (StringUtils.isEmpty(conf.getStartDirection())) {
+                //鍙宠竟璧峰锛岄粯璁ょ旱鍚戝竷绾匡紝鐩存帴杩斿洖
+                return temps;
+            }
+            if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) {
+                //鍙宠竟璧峰锛屾í鍚戝竷绾�
+                return grainUtil.reversalRight1(temps, conf.getCableRule());
+            }
+            //鍙宠竟璧峰锛岄粯璁ょ旱鍚戝竷绾匡紝鐩存帴杩斿洖
+            return temps;
+        }
+        //璧峰鏂逛綅涓哄彸涓婃椂
+        if (Constant.GRAIN_START_ORIENTATION_RIGHT_UP.equals(conf.getStartOrientation())) {
+            if (StringUtils.isEmpty(conf.getStartDirection())) {
+                //鍙充笂璧峰锛岄粯璁ょ旱鍚戝竷绾�
+                return grainUtil.reversalRightUp2(temps, conf.getCableRule());
+            }
+            if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) {
+                //鍙充笂璧峰锛屾í鍚戝竷绾�
+                return grainUtil.reversalRightUp1(temps, conf.getCableRule());
+            }
+            //鍙充笂璧峰锛岄粯璁ょ旱鍚戝竷绾�
+            return grainUtil.reversalRightUp2(temps, conf.getCableRule());
+        }
+        //璧峰鏂逛綅涓哄乏杈规椂
+        if (Constant.GRAIN_START_ORIENTATION_LEFT.equals(conf.getStartOrientation())) {
+            if (StringUtils.isEmpty(conf.getStartDirection())) {
+                //宸﹁竟璧峰锛岄粯璁ょ旱鍚戝竷绾�
+                return grainUtil.reversalLeft2(temps, conf.getCableRule());
+            }
+            if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) {
+                //宸﹁竟璧峰锛屾í鍚戝竷绾�
+                return grainUtil.reversalLeft1(temps, conf.getCableRule());
+            }
+            //宸﹁竟璧峰锛岄粯璁ょ旱鍚戝竷绾�
+            return grainUtil.reversalLeft2(temps, conf.getCableRule());
+        }
+        //璧峰鏂逛綅涓哄乏涓婃椂
+        if (Constant.GRAIN_START_ORIENTATION_LEFT_UP.equals(conf.getStartOrientation())) {
+            if (StringUtils.isEmpty(conf.getStartDirection())) {
+                //宸︿笂璧峰锛岄粯璁ょ旱鍚戝竷绾�
+                return grainUtil.reversalLeftUp2(temps, conf.getCableRule());
+            }
+            if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) {
+                //宸︿笂璧峰锛屾í鍚戝竷绾�
+                return grainUtil.reversalLeftUp1(temps, conf.getCableRule());
+            }
+            //宸︿笂璧峰锛岄粯璁ょ旱鍚戝竷绾�
+            return grainUtil.reversalLeftUp2(temps, conf.getCableRule());
+        }
+
+        return temps;
+    }
+
+    /**
+     * 涓婇敟褰㈣ˉ鐐�(鐐逛綅浣嶇疆姝g‘锛岄渶瑕佽ˉ鐐逛负-102)
+     *
+     * @param depotConf
+     * @param points
+     * @return
+     */
+    private String upConePoints(DepotConf depotConf, String points){
+        String[] cableRuleAtt = depotConf.getCableRule().split("-");
+        String[] cableCirAtt = depotConf.getCableCir().split("-");
+        //鑾峰彇鏈�澶х殑灞傞厤缃�
+        int layMax = Integer.valueOf(cableCirAtt[0]);
+        for (int i = 0; i < cableCirAtt.length; i++) {
+            if (Integer.valueOf(cableCirAtt[i]) >= layMax) {
+                layMax = Integer.valueOf(cableCirAtt[i]);
+            }
+        }
+        //鎵�鍦ㄥ眰浠�1寮�濮�
+        int curLay = 1;
+        //鎵�鍦ㄦ牴
+        int curRoot = 1;
+        //鎵�鍦ㄥ湀
+        int curCir = 1;
+        //褰撳墠鍦堢殑灞�
+        int cirLay = 1;
+        String[] array = points.split(",");
+
+        for (int i = 0; i < array.length; i++) {
+            curLay = (i % layMax) + 1;
+            curRoot = (i / layMax) + 1;
+            curCir = getCurCir(curRoot, cableRuleAtt);
+            cirLay = Integer.valueOf(cableCirAtt[curCir - 1]);
+
+            //姣斿閰嶇疆浜�5灞備絾鏄綋鍓嶆槸6灞傦紝璇存槑褰撳墠鐐逛负琛ュ伩鐐�
+            if (curLay <= (layMax - cirLay)) {
+                array[i] = String.valueOf(Constant.ADD_TEMP);
+            }
+        }
+        return StringUtils.join(array, ",");
+    }
+
+    /**
+     * 涓嬮敟褰㈣ˉ鐐�(鐐逛綅浣嶇疆姝g‘锛岄渶瑕佽ˉ鐐逛负-102)
+     *
+     * @param depotConf
+     * @param points
+     * @return
+     */
+    private String downConePoints(DepotConf depotConf, String points){
+        String[] cableRuleAtt = depotConf.getCableRule().split("-");
+        String[] cableCirAtt = depotConf.getCableCir().split("-");
+        //鑾峰彇鏈�澶х殑灞傞厤缃�
+        int layMax = Integer.valueOf(cableCirAtt[0]);
+        for (int i = 0; i < cableCirAtt.length; i++) {
+            if (Integer.valueOf(cableCirAtt[i]) >= layMax) {
+                layMax = Integer.valueOf(cableCirAtt[i]);
+            }
+        }
+        //鎵�鍦ㄥ眰浠�1寮�濮�
+        int curLay = 1;
+        //鎵�鍦ㄦ牴
+        int curRoot = 1;
+        //鎵�鍦ㄥ湀
+        int curCir = 1;
+        //褰撳墠鍦堢殑灞�
+        int cirLay = 1;
+        String[] array = points.split(",");
+
+        for (int i = 0; i < array.length; i++) {
+            curLay = (i % layMax) + 1;
+            curRoot = (i / layMax) + 1;
+            curCir = getCurCir(curRoot, cableRuleAtt);
+            cirLay = Integer.valueOf(cableCirAtt[curCir - 1]);
+
+            //姣斿閰嶇疆浜�5灞備絾鏄綋鍓嶆槸6灞傦紝璇存槑褰撳墠鐐逛负琛ュ伩鐐�
+            if (curLay > cirLay) {
+                array[i] = String.valueOf(Constant.ADD_TEMP);
+            }
+        }
+        return StringUtils.join(array, ",");
+    }
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java
new file mode 100644
index 0000000..7002fcf
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java
@@ -0,0 +1,55 @@
+package com.ld.igds.protocol.beibo.grainv1.builder;
+
+import com.ld.igds.protocol.beibo.grainv1.util.BeiboGrainServerUtils;
+import com.ld.igds.util.BytesUtil;
+
+/**
+ * 鍛戒护鐢熸垚
+ *
+ * @author czt
+ */
+public class CommandBuild {
+
+    private final static CommandBuild instance = new CommandBuild();
+
+    private CommandBuild() {
+    }
+
+    public static CommandBuild getInstance() {
+        return instance;
+    }
+
+    /**
+     * 绮儏閲囬泦鍛戒护
+     *
+     * @param grainAddr 绮儏鍒嗘満鍦板潃
+     * @return
+     */
+    public static String getMsgCheck(String grainAddr) {
+
+        StringBuffer sb = new StringBuffer();
+
+        //璧峰绗�
+        sb.append(BeiboGrainServerUtils.MSG_START);
+
+        //瀹為檯鍒嗘満鍦板潃
+        int addr = Integer.parseInt(grainAddr);
+        //绮儏鍒嗘満鍦板潃=鎷ㄧ爜寮�鍏冲湴鍧�+40H
+        addr += BeiboGrainServerUtils.BM;
+        sb.append(BytesUtil.intToHexStr1(addr));
+
+        //鎺у埗鍛戒护
+        sb.append("82");
+
+        //鍒嗘満鍦板潃
+        sb.append(BytesUtil.intToHexStr1(addr));
+
+        //娴嬫俯鐢电紗灞傛暟锛屼笉鐭ラ亾鐢电紗閲囬泦灞傛暟鏃讹紝榛樿00鎴栬�匜F
+        sb.append("00");
+
+        //缁撳熬绗�
+        sb.append(BeiboGrainServerUtils.MSG_END);
+
+        return sb.toString();
+    }
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java
new file mode 100644
index 0000000..1d6821a
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java
@@ -0,0 +1,42 @@
+package com.ld.igds.protocol.beibo.grainv1.builder;
+
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 杩斿洖娑堟伅灏佽
+ * 
+ * @author czt
+ *
+ */
+@Data
+public class ReMessage {
+
+
+	private String ip;
+
+	private int port;
+
+	private String startStr; //璧峰绗�
+
+	private String serId;     //鍒嗘満鍦板潃
+
+	private String grainStr;  //绮俯鏁版嵁
+
+	private String thStr;     //娓╂箍搴︽暟鎹�
+
+	private String expand;    //鎵╁厖鏁版嵁
+
+	private String hexCrc16;  //妫�楠岀爜
+
+	private String batchId;
+
+	private String companyId;
+
+	private Date receiveDate;
+
+	// 寮傚父淇℃伅
+	private String error;
+
+	private String strMsg;// 褰撳墠鍛戒护杞崲涓哄瓧绗︿覆鐨勪俊鎭�
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java
new file mode 100644
index 0000000..98613dc
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java
@@ -0,0 +1,58 @@
+package com.ld.igds.protocol.beibo.grainv1.builder;
+
+import com.ld.igds.protocol.beibo.grainv1.util.BeiboGrainServerUtils;
+import com.ld.igds.util.BytesUtil;
+
+/**
+ * 鏍规嵁鎺ユ敹鍒扮殑淇℃伅杩涜灏佽
+ *
+ * @author czt
+ */
+public class ReMessageBuilder {
+
+    private final static ReMessageBuilder instance = new ReMessageBuilder();
+
+    private ReMessageBuilder() {
+    }
+
+    public static ReMessageBuilder getInstance() {
+        return instance;
+    }
+
+    /**
+     * @param strMsg
+     * @return
+     */
+    public ReMessage buildMessage(String strMsg) {
+
+        ReMessage message = new ReMessage();
+        message.setStrMsg(strMsg);
+        //璁剧疆璧峰绗�
+        message.setStartStr(strMsg.substring(0, 9*2));
+
+        //璁剧疆绮儏鍒嗘満鍦板潃
+        String str = strMsg.substring(9*2, 10*2);
+        int i = BytesUtil.hexToInt(str);
+        str = String.valueOf(i - BeiboGrainServerUtils.BM);
+        message.setSerId(str);
+
+        //绮儏鏁版嵁
+        str = strMsg.substring(10*2, 1034*2);
+        message.setGrainStr(str);
+
+        //娓╁害鏁版嵁
+        str = strMsg.substring(1034*2, 1052*2);
+        message.setThStr(str);
+
+        //鎵╁厖鏁版嵁
+        str = strMsg.substring(1052*2, 1062*2);
+        message.setExpand(str);
+
+        //妫�楠岀爜
+        str = strMsg.substring(1062*2);
+        message.setHexCrc16(str);
+
+        return message;
+    }
+}
+
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java
new file mode 100644
index 0000000..de79179
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java
@@ -0,0 +1,121 @@
+package com.ld.igds.protocol.beibo.grainv1.client;
+
+import com.ld.igds.util.BytesUtil;
+import com.ld.io.api.InvokeResult;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.*;
+import io.netty.channel.oio.OioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.oio.OioSocketChannel;
+import io.netty.handler.codec.bytes.ByteArrayDecoder;
+import io.netty.handler.codec.bytes.ByteArrayEncoder;
+import io.netty.util.internal.logging.InternalLogger;
+import io.netty.util.internal.logging.InternalLoggerFactory;
+
+/**
+ * 璐濆崥绮儏鍗忚锛屽垎鏈轰负鏈嶅姟绔紝骞冲彴涓哄鎴风涓诲姩杩炴帴
+ * 
+ * @author czt
+ */
+public class BeiboClientEngine implements Runnable {
+
+	private final InternalLogger log = InternalLoggerFactory.getInstance(this.getClass());
+
+	private String host;
+	private int port;
+	// public ChannelFuture channelFuture;
+	public Channel channel;
+
+	public BeiboClientEngine(String host, int port) {
+		this.host = host;
+		this.port = port;
+	}
+	public void start() {
+		Thread thread = new Thread(this);
+		thread.start();
+	}
+
+	@Override
+	public void run() {
+		try {
+			startRun();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void startRun() throws Exception {
+		EventLoopGroup group = new OioEventLoopGroup();
+		Bootstrap b = new Bootstrap();
+//		b.option(ChannelOption.SO_KEEPALIVE, true);
+		b.group(group).channel(OioSocketChannel.class)
+				.handler(new ChannelInitializer<SocketChannel>() {
+					@Override
+					protected void initChannel(SocketChannel ch)
+							throws Exception {
+						ChannelPipeline p = ch.pipeline();
+						// 瀛楃涓茶В鐮佸拰缂栫爜
+						p.addLast("decoder", new ByteArrayDecoder());
+						p.addLast("encoder", new ByteArrayEncoder());
+						// 鑷繁鐨勯�昏緫Handler
+						p.addLast("handler", new ClientHandler());
+					}
+				});
+
+		// 鍙戣捣寮傛杩炴帴璇锋眰锛岀粦瀹氳繛鎺ョ鍙e拰host淇℃伅
+		ChannelFuture channelFuture = b.connect(host, port);
+		this.channel = channelFuture.channel();
+//		 channelFuture.channel().closeFuture().sync();
+
+		channelFuture.addListener(new ChannelFutureListener() {
+			@Override
+			public void operationComplete(ChannelFuture arg0) throws Exception {
+				if (channelFuture.isSuccess()) {
+					log.info("杩炴帴鏈嶅姟鍣ㄦ垚鍔�");
+				} else {
+					log.info("杩炴帴鏈嶅姟鍣ㄥけ璐�");
+					channelFuture.cause().printStackTrace();
+					group.shutdownGracefully(); // 鍏抽棴绾跨▼缁�
+				}
+			}
+		});
+	}
+
+	public InvokeResult send(byte[] array) throws InterruptedException {
+		if (null == channel) {
+			return InvokeResult.SOCKET_NOT_CREATE;
+		}
+		if (!channel.isActive()) {
+			return InvokeResult.CHANNEL_CLOSED;
+		}
+		channel.writeAndFlush(Unpooled.copiedBuffer(array)).sync();
+
+		return InvokeResult.SUCCESS;
+	}
+
+	public static void main(String[] args) {
+		try {
+
+			String msg = "000000000006010600070012";
+			BeiboClientEngine test = new BeiboClientEngine(
+					"192.168.1.95", 9999);
+
+			test.start();
+
+			msg = "BB BB BB BB";
+
+			// Thread.sleep(3000L);
+
+			test.send(BytesUtil.hexStrToBytes(msg));
+
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public Channel getChannel() {
+		return channel;
+	}
+
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java
new file mode 100644
index 0000000..4d97ce2
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java
@@ -0,0 +1,62 @@
+package com.ld.igds.protocol.beibo.grainv1.client;
+
+import com.ld.igds.protocol.beibo.grainv1.analysis.AnalysisService;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.SpringUtil;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.util.internal.logging.InternalLogger;
+import io.netty.util.internal.logging.InternalLoggerFactory;
+
+import java.net.InetSocketAddress;
+
+/**
+ * Handles a client-side channel.
+ */
+
+public class ClientHandler extends SimpleChannelInboundHandler<Object> {
+
+	private AnalysisService analysisService;
+
+	private final InternalLogger log = InternalLoggerFactory.getInstance(this.getClass());
+
+	@Override
+	public void channelActive(ChannelHandlerContext ctx) {
+		InetSocketAddress insocket = (InetSocketAddress) ctx.channel()
+				.remoteAddress();
+		log.info("鍒嗘満鎴愬姛杩炴帴锛孖P={},port={}", insocket.getAddress()
+				.getHostAddress(), insocket.getPort());
+	}
+
+	@Override
+	public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+		super.channelInactive(ctx);
+
+		InetSocketAddress insocket = (InetSocketAddress) ctx.channel()
+				.remoteAddress();
+
+		log.info("鍒嗘満鏂紑杩炴帴锛孖P={},port={}", insocket.getAddress(),insocket.getPort());
+	}
+
+	@Override
+	public void channelRead0(ChannelHandlerContext ctx, Object msg)
+			throws Exception {
+		byte[] bytes = (byte[]) msg;
+		String result = BytesUtil.bytesToString(bytes);
+		log.info("鍒嗘満杩斿洖淇℃伅=" + result);
+
+//		InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress();
+
+		//瑙f瀽
+		if (null == analysisService) {
+			analysisService = (AnalysisService) SpringUtil.getBean(AnalysisService.BEAN_ID);
+		}
+//		analysisService.analysis(result);
+	}
+
+	@Override
+	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+		ctx.close();
+	}
+
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java
new file mode 100644
index 0000000..e752e77
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * 璐濆崥绮儏鍗忚-鍒嗘満涓烘湇鍔$
+ */
+package com.ld.igds.protocol.beibo.grainv1;
+
+
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java
new file mode 100644
index 0000000..5827efb
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java
@@ -0,0 +1,41 @@
+package com.ld.igds.protocol.beibo.grainv1.server;
+
+import com.ld.io.api.HeartbeatProvider;
+import com.ld.io.api.IoSession;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鎻愪緵蹇冭烦淇℃伅
+ *
+ * @author czt
+ */
+@Slf4j
+@Service
+public class BeiboGrainV1HeartbeatImpl implements HeartbeatProvider {
+
+    @Override
+    public byte[] provide(IoSession session) {
+
+
+        //鐩存帴鏍规嵁涓绘満SESSIOn鍒ゆ柇
+        IoSession session1 = BeiboGrainV1ServerUtils.getSession();
+
+        Long lastBeatTime = BeiboGrainV1ServerUtils.getHearBeat(session1);
+
+        if (null == lastBeatTime) {
+            return null;
+        }
+
+        //濡傛灉鏈�鍚庝竴娆$粓绔績璺虫椂闂磋窛绂诲綋鍓嶆椂闂村ぇ浜� 缁堢蹇冭烦鏃堕棿鐨�3娆★紝鍒欏垽鏂负绂荤嚎
+        long deTime = System.currentTimeMillis() - lastBeatTime;
+
+        if (deTime > (BeiboGrainV1ServerUtils.HEART_BEAT_TIME * 3 * 1000)) {
+            log.info("-----------瓒呰繃{}绉掓湭鑾峰彇鍒板績璺充俊鎭紝鍒ゅ畾缁堢绂荤嚎锛岃涪鍑鸿繛鎺�------------{}-{}", deTime, session.getAddress(), session.getPort());
+
+            session.destroy();
+        }
+
+        return null;
+    }
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java
new file mode 100644
index 0000000..b3df71c
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java
@@ -0,0 +1,50 @@
+package com.ld.igds.protocol.beibo.grainv1.server;
+
+import com.ld.igds.protocol.beibo.grainv1.analysis.AnalysisService;
+import com.ld.igds.util.BytesUtil;
+import com.ld.io.api.IoMsgConsumer;
+import com.ld.io.api.IoSession;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Slf4j
+@Service
+public class BeiboGrainV1MessageConsumer implements IoMsgConsumer {
+
+
+    @Autowired
+    private AnalysisService analysisService;
+
+    /**
+     * 澶勭悊娑堟伅
+     *
+     * @param ioSession
+     * @param bytes
+     */
+    @Override
+    public void consume(IoSession ioSession, byte[] bytes) {
+        if (null == bytes) {
+            log.error("Reply bytes is null");
+            return;
+        }
+
+        //娣诲姞淇℃伅蹇冭烦鏍囪
+        BeiboGrainV1ServerUtils.addHeartBeat(ioSession);
+
+        //榛樿璁剧疆涓婚�氳鏈嶅姟
+        BeiboGrainV1ServerUtils.addSession(ioSession);
+
+        try {
+            String hexStr = BytesUtil.bytesToString(bytes);
+            log.info("涓绘満杩斿洖鎶ユ枃------->>骞冲彴锛�" + hexStr);
+
+            analysisService.analysis(ioSession.getAddress(), ioSession.getPort(), hexStr);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+}
\ No newline at end of file
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java
new file mode 100644
index 0000000..8b14e90
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java
@@ -0,0 +1,110 @@
+package com.ld.igds.protocol.beibo.grainv1.server;
+
+import com.ld.igds.util.BytesUtil;
+import com.ld.io.api.*;
+import com.ld.io.netty.NettyServer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Desc: 璐濆崥绮儏鍗忚-涓插彛鏈嶅姟鍣ㄥ鎴风
+ * @author: czt
+ * @update-time: 2023/09/27
+ */
+@Slf4j
+@Service
+public class BeiboGrainV1ServerEngine {
+
+    public static final Integer PORT = 9311;
+
+    @Autowired
+    private BeiboGrainV1MessageConsumer defaultMessageConsumer;
+    @Autowired
+    private BeiboGrainV1SessionListener defaultSessionListener;
+    // 蹇冭烦鎻愪緵
+    private static HeartbeatProvider heartbeatProvider = new BeiboGrainV1HeartbeatImpl();
+
+    private IoSessionQuery sessionQuery;
+
+    public void start(Integer port) {
+        IoServerOption ioServerOption = new IoServerOption();
+
+        if (null != port) {
+            ioServerOption.setPort(port);
+        } else {
+            ioServerOption.setPort(PORT);
+        }
+        ioServerOption.setSplitDecoderType(SplitByteDecoderType.NO_LIMIT);
+//        //纭缁撳熬鏍囧織
+//        ioServerOption.setDelimiter();
+
+        // 閰嶇疆绯荤粺蹇冭烦闂撮殧
+        ioServerOption.setReaderIdleTime(5 * 60);
+
+        NettyServer ioServer = new NettyServer(ioServerOption, defaultMessageConsumer, defaultSessionListener, heartbeatProvider);
+        ioServer.startup();
+
+        sessionQuery = ioServer.getSessionQuery();
+
+
+        log.info("* ");
+        log.info("* ========================");
+        log.info("* ");
+        log.info("* [GRAIN-SERVER锛欱EIBO_GRAIN,PORT={}]", PORT);
+        log.info("* ");
+        log.info("* ========================");
+        log.info("* ");
+
+        System.out.println("* ========================");
+        System.out.println("* ");
+        System.out.println("* [GRAIN-SERVER锛欱EIBO_GRAIN,PORT={}]" + port);
+        System.out.println("* ");
+        System.out.println("* ========================");
+    }
+
+    public IoSessionQuery getSessionQuery() {
+        return sessionQuery;
+    }
+
+    /**
+     * 鍙戦�佷俊鎭�
+     *
+     * @param ip
+     * @param port
+     * @param msg
+     * @return
+     */
+    public InvokeResult push(String ip, int port, byte[] msg) {
+        IoSessionQuery sessionFactory = getSessionQuery();
+        List<IoSession> sessions = sessionFactory.getAllSession();
+        IoSession session = null;
+        for (IoSession ioSession : sessions) {
+            if (BeiboGrainV1ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) {
+                session = ioSession;
+                break;
+            }
+        }
+        if (null == session) {
+            return InvokeResult.CHANNEL_CLOSED;
+        }
+        return session.invoke(msg);
+    }
+
+    /**
+     * 鐩存帴浣跨敤鍐呭瓨鐨凷ession鎵ц
+     */
+    public InvokeResult pushByMin(String hexStr) {
+
+        IoSession session = BeiboGrainV1ServerUtils.getSession();
+
+        if (null == session) {
+            return InvokeResult.CHANNEL_CLOSED;
+        }
+        byte[] msg = BytesUtil.hexStrToBytes(hexStr);
+        return session.invoke(msg);
+    }
+
+}
\ No newline at end of file
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java
new file mode 100644
index 0000000..a7b5f73
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java
@@ -0,0 +1,65 @@
+package com.ld.igds.protocol.beibo.grainv1.server;
+
+
+import com.ld.igds.util.BytesUtil;
+import com.ld.io.api.IoSession;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 宸ュ叿绫�
+ *
+ * @author vince
+ */
+public class BeiboGrainV1ServerUtils {
+
+
+    /**
+     * 璁板綍姣忎釜杩炴帴鐨勬渶鍚庝竴娆′俊鎭椂闂� key = 杩炴帴鐨凨YE锛宒ata =褰撳墠鏃堕棿鎴�
+     */
+    public static Map<String, Long> contextMapHeart = new HashMap<>();
+
+    public static Map<String, IoSession> contextIoSession = new HashMap<>();
+
+
+    public static int HEART_BEAT_TIME = 30;//蹇冭烦闂撮殧鏃堕棿
+
+    /**
+     * 閽堝鏃犵嚎绮儏涓绘満鐨勯粯璁D閰嶇疆
+     */
+    public static String DEFAULT_MAC_ID = "6550";
+
+    /**
+     * 鐢熸垚TCP杩炴帴鐨凨EY
+     *
+     * @param ip
+     * @param port
+     * @return
+     */
+    public static String getServerKey(String ip, Integer port) {
+        return ip + ":" + port;
+    }
+
+
+    /**
+     * 娣诲姞鏈�鏂板績璺虫椂闂存埑
+     *
+     * @param session
+     */
+    public static void addHeartBeat(IoSession session) {
+        contextMapHeart.put(getServerKey(session.getAddress(), session.getPort()), System.currentTimeMillis());
+    }
+
+    public static Long getHearBeat(IoSession session) {
+        return contextMapHeart.get(getServerKey(session.getAddress(), session.getPort()));
+    }
+
+    public static void addSession(IoSession session) {
+        contextIoSession.put(DEFAULT_MAC_ID, session);
+    }
+
+    public static IoSession getSession() {
+        return contextIoSession.get(DEFAULT_MAC_ID);
+    }
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java
new file mode 100644
index 0000000..6a759cb
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java
@@ -0,0 +1,61 @@
+package com.ld.igds.protocol.beibo.grainv1.server;
+
+import com.ld.igds.common.CoreSerService;
+import com.ld.igds.constant.Constant;
+import com.ld.igds.models.DeviceSer;
+import com.ld.igds.util.ContextUtil;
+import com.ld.io.api.IoSession;
+import com.ld.io.api.IoSessionListener;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Slf4j
+@Service
+public class BeiboGrainV1SessionListener implements IoSessionListener {
+
+    @Autowired
+    private CoreSerService coreSerService;
+    /**
+     * 璁惧鍒涘缓鍦ㄧ嚎锛岄渶瑕佹敞鎰忓綋鍓嶄娇鐢ㄤ富鏈烘ā寮忥紝涓绘満涓婄嚎榛樿鎵�鏈夌浉鍚孲N閰嶇疆鐨勫垎鏈哄叏閮ㄤ笂绾�
+     *
+     * @param session
+     */
+    @Override
+    public void onCreate(IoSession session) {
+
+        //娣诲姞鍒板唴瀛�
+        BeiboGrainV1ServerUtils.addSession(session);
+
+        log.info("++++鏂板缓杩炴帴++++-IP={}锛孭ORT={}", session.getAddress(), session.getPort());
+
+        // 娣诲姞鑷畾涔変笟鍔D
+        session.setBusinessKey(BeiboGrainV1ServerUtils.getServerKey(session.getAddress(), session.getPort()));
+
+        //椤圭洰閲囩敤鏃犵嚎涓绘満妯″紡锛岀洿鎺ヨ幏鍙栭粯璁よ澶�
+        DeviceSer deviceSer = coreSerService.getCacheSerBySn(ContextUtil.getDefaultCompanyId(), BeiboGrainV1ServerUtils.DEFAULT_MAC_ID);
+        if (null == deviceSer) return;
+        coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_Y);
+        //鏇存柊缂撳瓨
+        coreSerService.refreshCache(deviceSer.getCompanyId());
+    }
+
+    /**
+     * 娉ㄦ剰锛屽綋鍓嶉噰鐢ㄤ富鏈烘ā寮忥紝涓绘満绂荤嚎鎵�鏈夌浉鍚孲N閰嶇疆鐨勫垎鏈哄叏閮ㄧ绾�
+     *
+     * @param session
+     */
+    @Override
+    public void onDestroy(IoSession session) {
+        log.info("----杩炴帴鏂紑-----IP={}锛孭ORT={}", session.getAddress(), session.getPort());
+
+        //椤圭洰閲囩敤鏃犵嚎涓绘満妯″紡锛岀洿鎺ヨ幏鍙栭粯璁よ澶�
+        DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BeiboGrainV1ServerUtils.DEFAULT_MAC_ID);
+
+        if (null == deviceSer) return;
+
+    }
+}
diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java
new file mode 100644
index 0000000..281c048
--- /dev/null
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java
@@ -0,0 +1,17 @@
+package com.ld.igds.protocol.beibo.grainv1.util;
+
+/**
+ * 宸ュ叿绫�
+ *
+ * @author czt
+ */
+public class BeiboGrainServerUtils {
+
+
+    public static String MSG_START = "00000000FFEB90FEAA"; //璧峰绗�
+    public static String MSG_END = "00000000000000000000000000"; //缁撳熬绗�
+
+    public static int BM = 64; //缁撳熬绗�
+
+
+}
diff --git a/igds-protocol-es/pom.xml b/igds-protocol-es/pom.xml
new file mode 100644
index 0000000..849b1f4
--- /dev/null
+++ b/igds-protocol-es/pom.xml
@@ -0,0 +1,56 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>com.ld.igds</groupId>
+	<artifactId>igds-protocol-es</artifactId>
+	<version>4.0.0-RELEASE</version>
+	<packaging>jar</packaging>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<java.version>1.8</java.version>
+		<igds.version>4.0.0-RELEASE</igds.version>
+	</properties>
+
+	<dependencies>
+
+		<!-- 寮曞叆涔夊姟鏍稿績鍖� -->
+		<dependency>
+			<groupId>com.ld.igds</groupId>
+			<artifactId>igds-core</artifactId>
+			<version>${igds.version}</version>
+		</dependency>
+
+		<!-- 寮曞叆鑳借�楀寘 -->
+		<dependency>
+			<groupId>com.ld.igds</groupId>
+			<artifactId>igds-es</artifactId>
+			<version>${igds.version}</version>
+		</dependency>
+
+		<!-- 寮曞叆IO鍖� -->
+		<dependency>
+			<groupId>com.ld.base.io</groupId>
+			<artifactId>base-io-netty</artifactId>
+			<version>1.0.0-SNAPSHOT</version>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+					<compilerArguments>
+						<extdirs>src\main\webapp\WEB-INF\lib</extdirs>
+					</compilerArguments>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
\ No newline at end of file
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/RemoteEsServiceImpl.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/RemoteEsServiceImpl.java
new file mode 100644
index 0000000..99754d1
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/RemoteEsServiceImpl.java
@@ -0,0 +1,73 @@
+package com.ld.igds.protocol.es.dlt645;
+
+import com.ld.igds.constant.RedisConst;
+import com.ld.igds.io.RemoteEsService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.constant.ProtocolEnum;
+import com.ld.igds.io.request.BaseRequest;
+import com.ld.igds.io.response.BaseResponse;
+import com.ld.igds.io.response.GrainResponse;
+import com.ld.igds.protocol.es.dlt645.builder.CommandBuild;
+import com.ld.igds.protocol.es.dlt645.client.Dlt645ClientEngine;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.RedisUtil;
+import com.ld.io.api.InvokeResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 褰撳墠鍗忚瀹炵幇锛岃兘鑰楀崗璁�
+ *
+ * @author czt
+ */
+@Slf4j
+@Component(RemoteEsServiceImpl.BEAN_ID)
+public class RemoteEsServiceImpl implements RemoteEsService {
+
+    public static final String BEAN_ID = "dlt645.remoteEsServiceImpl";
+
+    @Autowired
+    private RedisUtil redisUtil;
+    @Override
+    public String getProtocol() {
+        return ProtocolEnum.TCP_ES_DLT645_V1.getCode();
+    }
+
+    @Override
+    public BaseResponse checkEs(BaseRequest request) {
+
+        try {
+            log.info("DL/T645澶氬姛鑳界數琛ㄥ垎鏈哄紑濮嬫娴嬶紝鍒嗘満{}鐨処P={},绔彛={}",request.getSerId(),request.getIp(),request.getPort());
+
+            Dlt645ClientEngine clientEngine = new Dlt645ClientEngine(request.getIp(), request.getPort());
+            clientEngine.start();
+            Thread.sleep(1000);
+
+            //閲囬泦鍛戒护瀛樺叆缂撳瓨锛岃В鏋愭椂鍒嗚鲸鏄摢涓粨鐨勮兘鑰楋紝鏃舵晥5鍒嗛挓
+            String key = RedisConst.buildKey(request.getCompanyId(), "ES-DLT645", request.getSerId());
+            redisUtil.set(key, request.getDepotId(), 60*5);
+
+            //鐢熸垚鍛戒护-鏌ヨ鎬荤數鑳界殑鍛戒护
+            String hexStr = CommandBuild.getInstance().getMsgCheck(request.getSerId());
+
+            InvokeResult result = clientEngine.send(BytesUtil.hexStrToBytes(hexStr));
+
+            log.info("result=" +result.getMessage());
+
+            // 灏佽杩斿洖淇℃伅
+            if (InvokeResult.SUCCESS == result) {
+                return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+                        "鑳借�楀懡浠ゅ彂閫佹垚鍔燂紒");
+            } else {
+                log.error("骞冲彴------>>>>鑳借�楀垎鏈猴細鑳借�楁娴�-澶辫触{}", result.getMessage());
+                return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                        "鍛戒护鍙戦�佸紓甯革細" + result.getMessage());
+            }
+
+        } catch (Exception e) {
+            log.error("鑳借�楁娴嬪紓甯革細{}", e);
+            return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庣寮傚父锛�" + e.getMessage());
+        }
+    }
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/analysis/AnalysisService.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/analysis/AnalysisService.java
new file mode 100644
index 0000000..be01020
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/analysis/AnalysisService.java
@@ -0,0 +1,99 @@
+package com.ld.igds.protocol.es.dlt645.analysis;
+
+import com.ld.igds.common.CoreSerService;
+import com.ld.igds.constant.RedisConst;
+import com.ld.igds.es.dto.EsData;
+import com.ld.igds.es.service.CoreEsService;
+import com.ld.igds.models.DeviceSer;
+import com.ld.igds.protocol.es.dlt645.util.Dlt645Utils;
+import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.util.Date;
+
+/**
+ * DLT645鐢佃〃鍗忚瑙f瀽
+ *
+ * @author czt
+ */
+@Slf4j
+@Component(AnalysisService.BEAN_ID)
+public class AnalysisService {
+
+
+    public static final String BEAN_ID = "dlt645.analysisService";
+
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private CoreSerService coreSerService;
+    @Autowired
+    private CoreEsService esService;
+
+    /**
+     *
+     * @param result
+     */
+    public void analysis(String result){
+        log.info("鑳借�楀垎鏈�------->>骞冲彴锛氫俊鎭姤鏂�={}", result);
+        if(!result.startsWith(Dlt645Utils.MSG_START)){
+            log.error("鑳借�楀垎鏈�------->>骞冲彴锛岃В鏋愯兘鑰楀け璐ワ細鎶ユ枃璧峰绗﹂敊璇紝涓嶈В鏋�");
+            return;
+        }
+        //鍘婚櫎璧峰绗�
+        result = result.substring(8);
+        //鑾峰彇鏍¢獙浣�
+        String oldCheck = result.substring(result.length() - 4, result.length() - 2);
+        String check = Dlt645Utils.makeCheck(result.substring(0, result.length() - 4));
+
+        if(!check.equals(oldCheck)){
+            log.error("鑳借�楀垎鏈�------->>骞冲彴锛岃В鏋愯兘鑰楀け璐ワ細鏍¢獙浣嶄笉瀵癸紝涓嶈В鏋�");
+            return;
+        }
+        analysisGrain(result);
+    }
+
+
+    private void analysisGrain(String result) {
+        try {
+
+            //鑾峰彇鑳借�楀垎鏈哄湴鍧�
+            String serId = Dlt645Utils.addrToString(result.substring(2, 14));
+
+            //鏍规嵁鍒嗘満鍦板潃鑾峰彇鍒嗘満淇℃伅
+            DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), serId);
+            if (ser == null) {
+                log.error("鑳借�楀垎鏈�-------->>骞冲彴锛岃В鏋愯兘鑰楀け璐ワ紝鏈幏鍙栧埌绯荤粺鑳借�椾富鏈洪厤缃細" + serId);
+                return;
+            }
+
+            String key = RedisConst.buildKey(ser.getCompanyId(), "ES-DLT645", ser.getId());
+            String depotId = (String) redisUtil.get(key);
+            if(null == depotId){
+                log.error("鑳借�楀垎鏈�-------->>骞冲彴锛岃В鏋愯兘鑰楀け璐ワ紝鏈幏鍙栧埌浠撳簱淇℃伅锛�" + depotId);
+                return;
+            }
+
+            //瑙f瀽鎬昏兘鑰楁暟鎹�
+            String dataStr = result.substring(28, 36);
+
+            Double esNum = Dlt645Utils.parseData(dataStr);
+            EsData esData = new EsData();
+            esData.setDeviceName("鐢佃〃");
+            esData.setCompanyId(ser.getCompanyId());
+            esData.setDepotId(depotId);
+            esData.setUpdateTime(new Date());
+
+            esData.setEp(esNum);
+            esData.setEs(esNum);
+
+            log.info("DLT645鐢佃〃----->>>骞冲彴锛氳兘鑰楁暟鎹В鏋愬畬鎴�-浠撳簱={}", esData.getDepotId());
+            esService.saveAndUpdateInc(esData);
+
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/builder/CommandBuild.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/builder/CommandBuild.java
new file mode 100644
index 0000000..de915b6
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/builder/CommandBuild.java
@@ -0,0 +1,57 @@
+package com.ld.igds.protocol.es.dlt645.builder;
+
+import com.ld.igds.protocol.es.dlt645.util.Dlt645Utils;
+
+/**
+ * 鐢佃〃鍛戒护鐢熸垚
+ *
+ * @author czt
+ */
+public class CommandBuild {
+
+    private final static CommandBuild instance = new CommandBuild();
+
+    private CommandBuild() {
+    }
+
+    public static CommandBuild getInstance() {
+        return instance;
+    }
+
+    /**
+     * 鑳借�楅噰闆嗗懡浠�
+     *
+     * @param esAddr 鐢佃〃鍦板潃
+     * @return
+     */
+    public static String getMsgCheck(String esAddr) {
+
+        //鑾峰彇鍛戒护
+        StringBuffer sb = new StringBuffer();
+
+        //甯ц捣濮嬬
+        sb.append("68");
+        //鍦板煙鍩燂紝鍙嶅悜鎷兼帴
+        sb.append(Dlt645Utils.addrToString(esAddr));
+        //甯ц捣濮嬬
+        sb.append("68");
+        //鎺у埗鐮佸強
+        sb.append("11");
+        //鏁版嵁鍩熼暱搴�
+        sb.append("04");
+        //鏁版嵁鍩�
+        sb.append("33333433");
+        //鏍¢獙鐮�
+        String checkNum = Dlt645Utils.makeCheck(sb.toString());
+        sb.append(checkNum);
+
+        StringBuffer sb0 = new StringBuffer();
+        //璧峰绗�
+        sb0.append(Dlt645Utils.MSG_START);
+        sb0.append(sb);
+        //缁撳熬绗�
+        sb0.append(Dlt645Utils.MSG_END);
+
+        return sb0.toString();
+    }
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/ClientHandler.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/ClientHandler.java
new file mode 100644
index 0000000..673ae52
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/ClientHandler.java
@@ -0,0 +1,62 @@
+package com.ld.igds.protocol.es.dlt645.client;
+
+import com.ld.igds.protocol.es.dlt645.analysis.AnalysisService;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.SpringUtil;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.util.internal.logging.InternalLogger;
+import io.netty.util.internal.logging.InternalLoggerFactory;
+import java.net.InetSocketAddress;
+
+
+/**
+ * Handles a client-side channel.
+ */
+public class ClientHandler extends SimpleChannelInboundHandler<Object> {
+
+
+	private AnalysisService analysisService;
+
+	private final InternalLogger log = InternalLoggerFactory.getInstance(this.getClass());
+	@Override
+	public void channelActive(ChannelHandlerContext ctx) {
+		InetSocketAddress insocket = (InetSocketAddress) ctx.channel()
+				.remoteAddress();
+		log.info("鐢佃〃鏈嶅姟鍣ㄦ垚鍔熻繛鎺ワ紝IP={},port={}", insocket.getAddress()
+				.getHostAddress(), insocket.getPort());
+	}
+
+	@Override
+	public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+		super.channelInactive(ctx);
+
+		InetSocketAddress insocket = (InetSocketAddress) ctx.channel()
+				.remoteAddress();
+
+		log.info("鐢佃〃鏈嶅姟鍣ㄦ柇寮�杩炴帴锛孖P={},port={}", insocket.getAddress(),insocket.getPort());
+	}
+
+	@Override
+	public void channelRead0(ChannelHandlerContext ctx, Object msg)
+			throws Exception {
+		byte[] bytes = (byte[]) msg;
+		String result = BytesUtil.bytesToString(bytes);
+		log.info("鐢佃〃鏈嶅姟鍣ㄥ垎鏈鸿繑鍥炰俊鎭�=" + result);
+
+//		InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress();
+
+		//瑙f瀽
+		//璋冪敤瑙f瀽鎺ュ彛寮�濮嬭В鏋�
+		if (null == analysisService) {
+			analysisService = (AnalysisService) SpringUtil.getBean(AnalysisService.BEAN_ID);
+		}
+		analysisService.analysis(result);
+	}
+
+	@Override
+	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+		ctx.close();
+	}
+
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/Dlt645ClientEngine.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/Dlt645ClientEngine.java
new file mode 100644
index 0000000..ae11036
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/Dlt645ClientEngine.java
@@ -0,0 +1,98 @@
+package com.ld.igds.protocol.es.dlt645.client;
+
+import com.ld.io.api.InvokeResult;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.*;
+import io.netty.channel.oio.OioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.oio.OioSocketChannel;
+import io.netty.handler.codec.bytes.ByteArrayDecoder;
+import io.netty.handler.codec.bytes.ByteArrayEncoder;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * DL/T 645-2007澶氬姛鑳界數琛�
+ * 
+ * @author czt
+ */
+@Slf4j
+public class Dlt645ClientEngine implements Runnable {
+
+	private String host;
+	private int port;
+
+	public Channel channel;
+
+	public Dlt645ClientEngine(String host, int port) {
+		this.host = host;
+		this.port = port;
+	}
+	public void start() {
+		Thread thread = new Thread(this);
+		thread.start();
+	}
+
+	@Override
+	public void run() {
+		try {
+			startRun();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void startRun() throws Exception {
+		EventLoopGroup group = new OioEventLoopGroup();
+		Bootstrap b = new Bootstrap();
+		// b.option(ChannelOption.SO_KEEPALIVE, true);
+		b.group(group).channel(OioSocketChannel.class)
+				.handler(new ChannelInitializer<SocketChannel>() {
+					@Override
+					protected void initChannel(SocketChannel ch)
+							throws Exception {
+						ChannelPipeline p = ch.pipeline();
+						// 瀛楃涓茶В鐮� 鍜� 缂栫爜
+						p.addLast("decoder", new ByteArrayDecoder());
+						p.addLast("encoder", new ByteArrayEncoder());
+						// 鑷繁鐨勯�昏緫Handler
+						p.addLast("handler", new ClientHandler());
+					}
+				});
+
+		// 鍙戣捣寮傛杩炴帴璇锋眰锛岀粦瀹氳繛鎺ョ鍙e拰host淇℃伅
+		ChannelFuture channelFuture = b.connect(host, port);
+		this.channel = channelFuture.channel();
+		// channelFuture.channel().closeFuture().sync();
+
+		channelFuture.addListener(new ChannelFutureListener() {
+			@Override
+			public void operationComplete(ChannelFuture arg0) throws Exception {
+				if (channelFuture.isSuccess()) {
+					log.info("-----杩炴帴鐢佃〃鏈嶅姟鍣ㄦ垚鍔燂紝IP={}锛孭ORT={}", host, port);
+				} else {
+					log.info("-----杩炴帴鐢佃〃鏈嶅姟鍣ㄥけ璐ワ紝IP={}锛孭ORT={}", host, port);
+					channelFuture.cause().printStackTrace();
+					group.shutdownGracefully(); // 鍏抽棴绾跨▼缁�
+				}
+			}
+		});
+	}
+
+	public InvokeResult send(byte[] array) throws InterruptedException {
+		if (null == channel) {
+			return InvokeResult.SOCKET_NOT_CREATE;
+		}
+		if (!channel.isActive()) {
+			return InvokeResult.CHANNEL_CLOSED;
+		}
+		channel.writeAndFlush(Unpooled.copiedBuffer(array)).sync();
+
+		return InvokeResult.SUCCESS;
+	}
+
+	public Channel getChannel() {
+		return channel;
+	}
+
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/package-info.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/package-info.java
new file mode 100644
index 0000000..9fc7e9a
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/package-info.java
@@ -0,0 +1,7 @@
+
+
+/**
+ * @Desc: DL/T 645澶氬姛鑳界數琛�
+ * @author: czt
+ */
+package com.ld.igds.protocol.bhzn;
\ No newline at end of file
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/util/Dlt645Utils.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/util/Dlt645Utils.java
new file mode 100644
index 0000000..fa404a8
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/util/Dlt645Utils.java
@@ -0,0 +1,88 @@
+package com.ld.igds.protocol.es.dlt645.util;
+
+/**
+ * 宸ュ叿绫�
+ *
+ * @author czt
+ */
+public class Dlt645Utils {
+
+
+    public static String MSG_START = "FEFEFEFE"; //璧峰绗�
+    public static String MSG_END = "16"; //缁撳熬绗�
+
+    public static void main(String[] args) {
+        String s = makeCheck("6857141222000068110433333433");
+        System.out.println(s);
+    }
+
+    /**
+     * 灏�6涓瓧鑺傜殑鍦板潃鍩燂紝姣忓瓧鑺�2浣� BCD鐮�,杞崲涓�12浣�10杩涘埗鏁�
+     */
+    public static String addrToString(String str) {
+        byte[] bytes = stringToBytes(str);
+        return String.format("%02x%02x%02x%02x%02x%02x", bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0]);
+    }
+
+    /**
+     * DLT645鏍¢獙鐮�
+     */
+    public static String makeCheck(String data) {
+
+        if (data == null || data.equals("")) {
+            return "";
+        }
+        int total = 0;
+        int len = data.length();
+        int num = 0;
+        while (num < len) {
+            String s = data.substring(num, num + 2);
+            total += Integer.parseInt(s, 16);
+            num = num + 2;
+        }
+        /**
+         * 鐢�256姹備綑鏈�澶ф槸255锛屽嵆16杩涘埗鐨凢F
+         */
+        int mod = total % 256;
+        String hex = Integer.toHexString(mod);
+        len = hex.length();
+        // 濡傛灉涓嶅鏍¢獙浣嶇殑闀垮害锛岃ˉ0,杩欓噷鐢ㄧ殑鏄袱浣嶆牎楠�
+        if (len < 2) {
+            hex = "0" + hex;
+        }
+        return hex.toUpperCase();
+    }
+
+    /**
+     * 灏哠tring绫诲瀷杞崲鎴恇yte鏁扮粍
+     */
+    public static byte[] stringToBytes(String str) {
+        if (str == null || str.equals("")) {
+            return null;
+        }
+        byte[] bytes = new byte[str.length() / 2];
+        for (int i = 0; i < bytes.length; i++) {
+            String subStr = str.substring(i * 2, i * 2 + 2);
+            bytes[i] = (byte) Integer.parseInt(subStr, 16);
+        }
+        return bytes;
+    }
+
+    /**
+     * 瑙f瀽杩斿洖鐨勫叿浣撴暟鎹�
+     */
+    public static Double parseData(String dataStr) {
+        byte[] data = stringToBytes(dataStr);
+        // 姣忎釜瀛楄妭-33H澶勭悊
+        for (int i = 0; i < data.length; i++) {
+            data[i] = (byte) (data[i] - 0x33);
+        }
+        StringBuilder str = new StringBuilder();
+        // BCD鐮佽浆鎹㈡垚10杩涘埗
+        for (byte b : data) {
+            str.insert(0, String.format("%02x", b));
+        }
+        return Double.parseDouble(str.toString()) * 0.01;
+    }
+
+}
diff --git a/igds-protocol-zldz/.rules b/igds-protocol-zldz/.rules
new file mode 100644
index 0000000..f40ff34
--- /dev/null
+++ b/igds-protocol-zldz/.rules
@@ -0,0 +1,1178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RuleSet version="1.1"><PackageInfos>
+<PackageInfo name="dorado-core" version="7.6.0.2.190128.1750"/>
+<PackageInfo name="bdf2-orm" version="2.1.0"/>
+<PackageInfo name="bdf2-core" version="2.0.9"/>
+<PackageInfo name="dorado-uploader" version="1.0.20-SNAPSHOT"/>
+<PackageInfo name="bdf2-job" version="2.0.5-SNAPSHOT"/>
+<PackageInfo name="dorado-intro" version="0.2.1.140715.2255"/>
+<PackageInfo name="bdf2-swfviewer" version="2.0.6-SNAPSHOT"/>
+<PackageInfo name="bdf2-export" version="2.0.8"/>
+<PackageInfo name="dorado-vidor"/></PackageInfos><Rule name="Auxiliary"><Children><Child rule="Import" name="Import"></Child><Child rule="GroupStart" name="GroupStart"></Child><Child rule="GroupEnd" name="GroupEnd"></Child><Child rule="PlaceHolder" name="PlaceHolder"></Child><Child rule="PlaceHolderStart" name="PlaceHolderStart"></Child><Child rule="PlaceHolderEnd" name="PlaceHolderEnd"></Child></Children></Rule><Rule name="Import" scope="public" sortFactor="9001" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/Import.png"><PrimitiveProps>
+<Prop name="id"/>
+<Prop name="src"/></PrimitiveProps></Rule><Rule name="GroupStart" scope="public" sortFactor="9002" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/GroupStart.png"><PrimitiveProps>
+<Prop name="id"/></PrimitiveProps></Rule><Rule name="GroupEnd" scope="public" sortFactor="9003" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/GroupEnd.png"></Rule><Rule name="PlaceHolder" scope="public" sortFactor="9004" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/PlaceHolder.png"><PrimitiveProps>
+<Prop name="id"/></PrimitiveProps></Rule><Rule name="PlaceHolderStart" parents="PlaceHolder" scope="public" sortFactor="9005" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/PlaceHolderStart.png"></Rule><Rule name="PlaceHolderEnd" scope="public" sortFactor="9006" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/PlaceHolderEnd.png"></Rule><Rule name="Model" icon="/com/bstek/dorado/view/manager/Model.png"><Children><Child rule="AbstractDataType" name="DataType" aggregated="true"></Child><Child rule="AbstractDataProvider" name="DataProvider" aggregated="true"></Child><Child rule="AbstractDataResolver" name="DataResolver" aggregated="true"></Child></Children></Rule><Rule name="AbstractDataType" abstract="true" nodeName="DataType" type="com.bstek.dorado.data.type.AbstractDataType"><PrimitiveProps>
+<Prop name="name"/></PrimitiveProps><Props>
+<Prop name="creationType" type="java.lang.Class"/>
+<Prop name="matchType" type="java.lang.Class"/><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="tags"/></Props></Rule><Rule name="AbstractDataProvider" abstract="true" nodeName="DataProvider" type="com.bstek.dorado.data.provider.AbstractDataProvider"><PrimitiveProps>
+<Prop name="impl"/>
+<Prop name="parent"/>
+<Prop name="scope" enumValues="instant,thread,singleton,session,request"/>
+<Prop name="listener"/>
+<Prop name="overwrite" type="boolean"/>
+<Prop name="name"/></PrimitiveProps><Props>
+<Prop name="interceptor"/><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="parameter" editor="pojo" type="java.lang.Object"/></Props></Rule><Rule name="AbstractDataResolver" abstract="true" nodeName="DataResolver" type="com.bstek.dorado.data.resolver.AbstractDataResolver"><PrimitiveProps>
+<Prop name="impl"/>
+<Prop name="parent"/>
+<Prop name="scope" enumValues="instant,thread,singleton,session,request"/>
+<Prop name="listener"/>
+<Prop name="overwrite" type="boolean"/>
+<Prop name="name"/></PrimitiveProps><Props>
+<Prop name="interceptor"/><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="parameter" type="java.lang.Object"/></Props></Rule><Rule name="ViewConfig" label="ViewConfig" type="com.bstek.dorado.view.manager.ViewConfig" icon="/com/bstek/dorado/view/manager/ViewConfig.png"><PrimitiveProps>
+<Prop name="listener"/>
+<Prop name="template"/></PrimitiveProps><Props><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="scope" defaultValue="thread" enumValues="instant,thread,singleton,session,request"/></Props><Children><Child name="Arguments"><Rule name="Arguments" nodeName="Arguments" icon="/com/bstek/dorado/view/manager/Arguments.png"><Children><Child name="Argument" aggregated="true"><Rule name="Argument" nodeName="Argument" icon="/com/bstek/dorado/view/manager/Argument.png"><PrimitiveProps>
+<Prop name="name"/></PrimitiveProps><Props>
+<Prop name="value" type="java.lang.Object"/></Props></Rule></Child></Children></Rule></Child><Child name="Context"><Rule name="Context" nodeName="Context" icon="/com/bstek/dorado/view/manager/ViewContext.png"><Children><Child name="Attribute" aggregated="true"><Rule name="Attribute" nodeName="Attribute" icon="/com/bstek/dorado/view/manager/Attribute.png"><PrimitiveProps>
+<Prop name="name"/></PrimitiveProps><Props>
+<Prop name="value" type="java.lang.Object"/></Props></Rule></Child></Children></Rule></Child><Child rule="Model" name="Model"></Child><Child rule="View" name="View"></Child></Children></Rule><Rule name="LayoutHolder"><Children><Child rule="AnchorLayout" name="anchor"></Child><Child rule="DockLayout" name="dock"></Child><Child rule="HboxLayout" name="hbox"></Child><Child rule="VboxLayout" name="vbox"></Child><Child rule="FormLayout" name="form"></Child><Child rule="NativeLayout" name="native"></Child></Children></Rule><Rule name="View" parents="Container" abstract="true" type="com.bstek.dorado.view.View" scope="private" clientTypes="desktop"><PrimitiveProps>
+<Prop name="listener"/></PrimitiveProps><Props><Prop name="cache" type="com.bstek.dorado.view.ViewCache" compositeType="Fixed">
+<Prop name="maxAge" type="long"/>
+<Prop name="mode" enumValues="none,clientSide"/></Prop>
+<Prop name="javaScriptFile"/>
+<Prop name="packages"/>
+<Prop name="pageTemplate"/>
+<Prop name="pageUri"/>
+<Prop name="renderMode" defaultValue="onCreate" enumValues="onCreate,onDataLoaded,manual"/>
+<Prop name="skin"/>
+<Prop name="styleSheetFile"/>
+<Prop name="title" highlight="1"/></Props><ClientEvents>
+<ClientEvent name="onLoadData" parameters="self,arg"/>
+<ClientEvent name="onComponentRegistered" parameters="self,arg"/>
+<ClientEvent name="onComponentUnregistered" parameters="self,arg"/></ClientEvents><Children><Child rule="Component" name="Children" aggregated="true"></Child></Children></Rule><Rule name="DataType" parents="EntityDataTypeSupport" label="DataType" type="com.bstek.dorado.data.type.DefaultEntityDataType" scope="public" sortFactor="1" robots="datatype-reflection|鑷姩鍒涘缓PropertyDefs" icon="/com/bstek/dorado/data/type/DefaultEntityDataType.png" reserve="default"><Children><Child rule="Reference" name="Reference" aggregated="true"></Child><Child rule="BasePropertyDef" name="PropertyDef" aggregated="true"></Child></Children></Rule><Rule name="NonAggregationDataType" parents="AbstractDataType" abstract="true" type="com.bstek.dorado.data.type.NonAggregationDataType"></Rule><Rule name="EntityDataTypeSupport" parents="NonAggregationDataType" abstract="true" nodeName="DataType" type="com.bstek.dorado.data.type.EntityDataTypeSupport"><PrimitiveProps>
+<Prop name="impl"/>
+<Prop name="parent"/>
+<Prop name="listener"/>
+<Prop name="overwrite" type="boolean"/></PrimitiveProps><Props>
+<Prop name="cachable" type="java.lang.Boolean"/>
+<Prop name="acceptUnknownProperty" type="boolean"/>
+<Prop name="acceptValidationState" defaultValue="ok" enumValues="info,ok,warn,error"/>
+<Prop name="autoCreatePropertyDefs" type="boolean"/>
+<Prop name="defaultDisplayProperty"/>
+<Prop name="userData" editor="any" type="java.lang.Object"/></Props><ClientEvents>
+<ClientEvent name="onEntityToText" parameters="self,arg"/>
+<ClientEvent name="onAttributeChange" parameters="self,arg"/>
+<ClientEvent name="beforeInsert" parameters="self,arg"/>
+<ClientEvent name="beforeDataChange" parameters="self,arg"/>
+<ClientEvent name="onDataChange" parameters="self,arg"/>
+<ClientEvent name="beforeCurrentChange" parameters="self,arg"/>
+<ClientEvent name="onCurrentChange" parameters="self,arg"/>
+<ClientEvent name="beforeStateChange" parameters="self,arg"/>
+<ClientEvent name="beforeRemove" parameters="self,arg"/>
+<ClientEvent name="onMessageChange" parameters="self,arg"/>
+<ClientEvent name="onStateChange" parameters="self,arg"/>
+<ClientEvent name="onRemove" parameters="self,arg"/>
+<ClientEvent name="onEntityLoad" parameters="self,arg"/>
+<ClientEvent name="onInsert" parameters="self,arg"/></ClientEvents></Rule><Rule name="Reference" parents="LazyPropertyDef" label="Reference" type="com.bstek.dorado.data.type.property.Reference" scope="protected" icon="/com/bstek/dorado/data/type/property/Reference.png"><Props>
+<Prop name="activeOnNewEntity" type="boolean"/>
+<Prop name="dataProvider" highlight="1" type="com.bstek.dorado.data.provider.DataProvider"/>
+<Prop name="pageSize" type="int"/>
+<Prop name="parameter" highlight="1" editor="pojo" type="java.lang.Object"/></Props><ClientEvents>
+<ClientEvent name="beforeLoadData" parameters="self,arg"/>
+<ClientEvent name="onLoadData" parameters="self,arg"/></ClientEvents></Rule><Rule name="PropertyDef" abstract="true" type="com.bstek.dorado.data.type.property.PropertyDef"><PrimitiveProps>
+<Prop name="name"/></PrimitiveProps><Props>
+<Prop name="acceptUnknownMapKey" type="boolean"/>
+<Prop name="dataType" highlight="1" type="com.bstek.dorado.data.type.DataType"/>
+<Prop name="defaultValue" type="java.lang.Object"/>
+<Prop name="displayFormat"/>
+<Prop name="ignored" type="boolean"/>
+<Prop name="label" highlight="1"/><Prop name="mapping" type="com.bstek.dorado.data.type.property.Mapping" compositeType="Fixed">
+<Prop name="keyProperty"/>
+<Prop name="mapValues" editor="collection[pojo]" type="java.lang.Object"/>
+<Prop name="valueProperty"/></Prop><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="readOnly" type="boolean"/>
+<Prop name="required" type="boolean"/>
+<Prop name="submittable" defaultValue="true" type="boolean"/>
+<Prop name="tags"/>
+<Prop name="userData" editor="any" type="java.lang.Object"/>
+<Prop name="visible" defaultValue="true" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onGet" parameters="self,arg"/>
+<ClientEvent name="onSet" parameters="self,arg"/>
+<ClientEvent name="onValidate" parameters="self,arg"/>
+<ClientEvent name="onGetText" parameters="self,arg"/></ClientEvents><Children><Child rule="Validator" name="Validators" aggregated="true"></Child></Children></Rule><Rule name="Validator" abstract="true" nodeName="Validator" type="com.bstek.dorado.data.type.validator.Validator" icon="/com/bstek/dorado/view/type/property/validator/Validator.png"><PrimitiveProps>
+<Prop name="name"/></PrimitiveProps></Rule><Rule name="BasePropertyDef" parents="PropertyDefSupport" label="PropertyDef" nodeName="PropertyDef" type="com.bstek.dorado.data.type.property.BasePropertyDef" icon="/com/bstek/dorado/data/type/property/BasePropertyDef.png"><Props>
+<Prop name="propertyPath"/></Props></Rule><Rule name="PropertyDefSupport" parents="PropertyDef" abstract="true" type="com.bstek.dorado.data.type.property.PropertyDefSupport"></Rule><Rule name="com.bstek.dorado.data.type.property.PropertyDefSupport" parents="PropertyDef" abstract="true" type="com.bstek.dorado.data.type.property.PropertyDefSupport"></Rule><Rule name="LazyPropertyDef" parents="PropertyDefSupport" abstract="true" type="com.bstek.dorado.data.type.property.LazyPropertyDef"><Props>
+<Prop name="activeAtClient" defaultValue="true" type="boolean"/>
+<Prop name="cacheMode" enumValues="noCache,serverSide,clientSide,bothSides"/></Props></Rule><Rule name="DirectDataProvider" parents="AbstractDataProvider" label="DirectDataProvider" type="com.bstek.dorado.data.provider.DirectDataProvider" scope="public" sortFactor="2" icon="/com/bstek/dorado/data/provider/DirectDataProvider.png" reserve="direct"><PrimitiveProps>
+<Prop name="type" defaultValue="direct" fixed="true" visible="false"/></PrimitiveProps><Props>
+<Prop name="result" editor="pojo" type="java.lang.Object"/></Props></Rule><Rule name="DirectDataResolver" parents="AbstractDataResolver" label="DirectDataResolver" type="com.bstek.dorado.data.resolver.DirectDataResolver" scope="public" sortFactor="3" icon="/com/bstek/dorado/data/resolver/DirectDataResolver.png" reserve="direct"><PrimitiveProps>
+<Prop name="type" defaultValue="direct" fixed="true" visible="false"/></PrimitiveProps></Rule><Rule name="AbstractValidator" parents="Validator" abstract="true" nodeName="Validator" type="com.bstek.dorado.view.type.property.validator.AbstractValidator" icon="/com/bstek/dorado/view/type/property/validator/Validator.png"><Props>
+<Prop name="name"/>
+<Prop name="defaultResultState" defaultValue="error" enumValues="info,ok,warn,error"/>
+<Prop name="revalidateOldValue" defaultValue="true" type="boolean"/>
+<Prop name="runAt" enumValues="server,client,both"/></Props></Rule><Rule name="RequiredValidator" parents="BaseValidator" label="RequiredValidator" type="com.bstek.dorado.view.type.property.validator.RequiredValidator" scope="public" sortFactor="4" reserve="required"><PrimitiveProps>
+<Prop name="type" defaultValue="required" fixed="true" visible="false"/></PrimitiveProps><Props>
+<Prop name="acceptZeroOrFalse" type="boolean"/>
+<Prop name="trimBeforeValid" defaultValue="true" type="boolean"/></Props></Rule><Rule name="BaseValidator" parents="AbstractValidator" abstract="true" type="com.bstek.dorado.view.type.property.validator.BaseValidator"><Props>
+<Prop name="resultMessage"/></Props></Rule><Rule name="LengthValidator" parents="BaseValidator" label="LengthValidator" type="com.bstek.dorado.view.type.property.validator.LengthValidator" scope="public" sortFactor="5" reserve="length"><PrimitiveProps>
+<Prop name="type" defaultValue="length" fixed="true" visible="false"/></PrimitiveProps><Props>
+<Prop name="maxLength" defaultValue="-1" type="int"/>
+<Prop name="minLength" defaultValue="-1" type="int"/></Props></Rule><Rule name="CharLengthValidator" parents="BaseValidator" label="CharLengthValidator" type="com.bstek.dorado.view.type.property.validator.CharLengthValidator" scope="public" sortFactor="6" reserve="charLength"><PrimitiveProps>
+<Prop name="type" defaultValue="charLength" fixed="true" visible="false"/></PrimitiveProps><Props>
+<Prop name="maxLength" type="int"/>
+<Prop name="minLength" type="int"/></Props></Rule><Rule name="RangeValidator" parents="BaseValidator" label="RangeValidator" type="com.bstek.dorado.view.type.property.validator.RangeValidator" scope="public" sortFactor="7" reserve="range"><PrimitiveProps>
+<Prop name="type" defaultValue="range" fixed="true" visible="false"/></PrimitiveProps><Props>
+<Prop name="maxValue" defaultValue="-1" type="double"/>
+<Prop name="maxValueValidateMode" defaultValue="ignore" enumValues="allowEquals,notAllowEquals,ignore"/>
+<Prop name="minValue" defaultValue="-1" type="double"/>
+<Prop name="minValueValidateMode" defaultValue="ignore" enumValues="allowEquals,notAllowEquals,ignore"/></Props></Rule><Rule name="EnumValidator" parents="BaseValidator" label="EnumValidator" type="com.bstek.dorado.view.type.property.validator.EnumValidator" scope="public" sortFactor="8" reserve="enum"><PrimitiveProps>
+<Prop name="type" defaultValue="enum" fixed="true" visible="false"/></PrimitiveProps><Props>
+<Prop name="enumValues" highlight="1" editor="collection[value]" type="java.util.List"/></Props></Rule><Rule name="RegExpValidator" parents="BaseValidator" label="RegExpValidator" type="com.bstek.dorado.view.type.property.validator.RegExpValidator" scope="public" sortFactor="9" reserve="regExp"><PrimitiveProps>
+<Prop name="type" defaultValue="regExp" fixed="true" visible="false"/></PrimitiveProps><Props>
+<Prop name="blackRegExp"/>
+<Prop name="validateMode" enumValues="whiteBlack,blackWhite"/>
+<Prop name="whiteRegExp"/></Props></Rule><Rule name="AjaxValidator" parents="AbstractAjaxValidator" label="AjaxValidator" type="com.bstek.dorado.view.type.property.validator.AjaxValidator" scope="public" sortFactor="10" reserve="ajax"><PrimitiveProps>
+<Prop name="type" defaultValue="ajax" fixed="true" visible="false"/></PrimitiveProps><Props>
+<Prop name="ajaxAction" reference="AjaxAction:id"/>
+<Prop name="service" highlight="1"/></Props><ClientEvents>
+<ClientEvent name="beforeExecute" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractAjaxValidator" parents="AbstractValidator" abstract="true" type="com.bstek.dorado.view.type.property.validator.AbstractAjaxValidator"><Props>
+<Prop name="async" defaultValue="true" type="boolean"/>
+<Prop name="executingMessage"/></Props></Rule><Rule name="CustomValidator" parents="AbstractValidator" label="CustomValidator" type="com.bstek.dorado.view.type.property.validator.CustomValidator" scope="public" sortFactor="11" reserve="custom"><PrimitiveProps>
+<Prop name="type" defaultValue="custom" fixed="true" visible="false"/></PrimitiveProps><ClientEvents>
+<ClientEvent name="onValidate" parameters="self,arg"/></ClientEvents></Rule><Rule name="AnchorLayout" parents="Layout" label="AnchorLayout" nodeName="anchor" type="com.bstek.dorado.view.widget.layout.AnchorLayout" sortFactor="1001"></Rule><Rule name="Layout" abstract="true" type="com.bstek.dorado.view.widget.layout.Layout"><Props>
+<Prop name="className"/>
+<Prop name="padding" type="int"/></Props></Rule><Rule name="AnchorLayoutConstraint" parents="LayoutConstraintSupport" label="AnchorLayoutConstraint" type="com.bstek.dorado.view.widget.layout.AnchorLayoutConstraint"><Props>
+<Prop name="anchorBottom" enumValues="auto,none,container,previous"/>
+<Prop name="anchorLeft" enumValues="auto,none,container,previous"/>
+<Prop name="anchorRight" enumValues="auto,none,container,previous"/>
+<Prop name="anchorTop" enumValues="auto,none,container,previous"/>
+<Prop name="bottom"/>
+<Prop name="heightOffset" type="int"/>
+<Prop name="left"/>
+<Prop name="leftOffset" type="int"/>
+<Prop name="right"/>
+<Prop name="top"/>
+<Prop name="topOffset" type="int"/>
+<Prop name="widthOffset" type="int"/></Props></Rule><Rule name="LayoutConstraintSupport" abstract="true" type="com.bstek.dorado.view.widget.layout.LayoutConstraintSupport"><Props>
+<Prop name="padding" type="int"/></Props></Rule><Rule name="DockLayout" parents="Layout" label="DockLayout" nodeName="dock" type="com.bstek.dorado.view.widget.layout.DockLayout" sortFactor="1002"><Props>
+<Prop name="regionPadding" type="int"/></Props></Rule><Rule name="DockLayoutConstraint" parents="LayoutConstraintSupport" label="DockLayoutConstraint" type="com.bstek.dorado.view.widget.layout.DockLayoutConstraint"><Props>
+<Prop name="type" highlight="1" enumValues="left,top,right,bottom,center"/></Props></Rule><Rule name="HboxLayout" parents="AbstractBoxLayout" label="HBoxLayout" nodeName="hbox" type="com.bstek.dorado.view.widget.layout.HBoxLayout" sortFactor="1003"><Props>
+<Prop name="align" defaultValue="center" enumValues="top,center,bottom"/></Props></Rule><Rule name="AbstractBoxLayout" parents="Layout" abstract="true" type="com.bstek.dorado.view.widget.layout.AbstractBoxLayout"><Props>
+<Prop name="pack" defaultValue="start" enumValues="start,center,end"/>
+<Prop name="padding" defaultValue="2" type="int"/>
+<Prop name="regionPadding" defaultValue="2" type="int"/>
+<Prop name="stretch" defaultValue="true" type="boolean"/></Props></Rule><Rule name="HboxLayoutConstraint" parents="LayoutConstraintSupport" label="HBoxLayoutConstraintSupport" type="com.bstek.dorado.view.widget.layout.HBoxLayoutConstraintSupport"><Props>
+<Prop name="align" defaultValue="center" enumValues="top,center,bottom"/></Props></Rule><Rule name="VboxLayout" parents="AbstractBoxLayout" label="VBoxLayout" nodeName="vbox" type="com.bstek.dorado.view.widget.layout.VBoxLayout" sortFactor="1004"><Props>
+<Prop name="align" defaultValue="left" enumValues="left,center,right"/>
+<Prop name="lazyRenderChild" type="boolean"/></Props></Rule><Rule name="VboxLayoutConstraint" parents="LayoutConstraintSupport" label="VBoxLayoutConstraintSupport" type="com.bstek.dorado.view.widget.layout.VBoxLayoutConstraintSupport"><Props>
+<Prop name="align" defaultValue="left" enumValues="left,center,right"/></Props></Rule><Rule name="FormLayout" parents="Layout" label="FormLayout" nodeName="form" type="com.bstek.dorado.view.widget.layout.FormLayout" sortFactor="1005"><Props>
+<Prop name="colPadding" defaultValue="6" type="int"/>
+<Prop name="cols" highlight="1"/>
+<Prop name="padding" defaultValue="8" type="int"/>
+<Prop name="rowHeight" type="int"/>
+<Prop name="rowPadding" defaultValue="6" type="int"/>
+<Prop name="stretchWidth" type="boolean"/></Props></Rule><Rule name="FormLayoutConstraint" parents="LayoutConstraintSupport" label="FormLayoutConstraint" type="com.bstek.dorado.view.widget.layout.FormLayoutConstraint"><Props>
+<Prop name="align" defaultValue="left" enumValues="left,center,right"/>
+<Prop name="colSpan" type="int"/>
+<Prop name="rowSpan" type="int"/>
+<Prop name="vAlign" defaultValue="top" enumValues="top,center,bottom"/></Props></Rule><Rule name="NativeLayout" parents="Layout" label="NativeLayout" nodeName="native" type="com.bstek.dorado.view.widget.layout.NativeLayout" sortFactor="1006"><Props>
+<Prop name="lazyRenderChild" type="boolean"/>
+<Prop name="style"/></Props></Rule><Rule name="NativeLayoutConstraint" parents="HashMap" label="CommonLayoutConstraint" type="com.bstek.dorado.view.widget.layout.CommonLayoutConstraint"></Rule><Rule name="AbstractMap" abstract="true" type="java.util.AbstractMap"></Rule><Rule name="HashMap" parents="AbstractMap" label="HashMap" type="java.util.HashMap"></Rule><Rule name="DataSet" parents="Component" label="DataSet" nodeName="DataSet" type="com.bstek.dorado.view.widget.data.DataSet" sortFactor="2001" category="General" icon="/com/bstek/dorado/view/widget/data/DataSet.png" autoGenerateId="true" clientTypes="desktop,touch"><PrimitiveProps>
+<Prop name="listener"/></PrimitiveProps><Props>
+<Prop name="cacheable" type="boolean"/>
+<Prop name="dataProvider" highlight="1" type="com.bstek.dorado.data.provider.DataProvider"/>
+<Prop name="dataType" highlight="1" type="com.bstek.dorado.data.type.DataType"/>
+<Prop name="loadMode" defaultValue="lazy" enumValues="preload,onCreate,onReady,lazy,manual"/>
+<Prop name="pageSize" type="int"/>
+<Prop name="parameter" highlight="1" editor="any" type="java.lang.Object"/>
+<Prop name="readOnly" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onLoadData" parameters="self,arg"/>
+<ClientEvent name="beforeLoadData" parameters="self,arg"/>
+<ClientEvent name="onDataLoad" parameters="self,arg" deprecated="true"/></ClientEvents></Rule><Rule name="Control" parents="com.bstek.dorado.view.widget.Control" label="Control" nodeName="Control" type="com.bstek.dorado.view.widget.DefaultControl" sortFactor="2002" category="General" clientTypes="desktop,touch"></Rule><Rule name="Container" parents="com.bstek.dorado.view.widget.Control" label="Container" type="com.bstek.dorado.view.widget.Container" sortFactor="2003" category="General" icon="/com/bstek/dorado/view/widget/Container.png" clientTypes="desktop,touch"><PrimitiveProps>
+<Prop name="listener"/></PrimitiveProps><Props>
+<Prop name="containerUi" defaultValue="default" enumValues="default,optional1"/>
+<Prop name="contentOverflow" enumValues="visible,hidden,scroll,auto"/>
+<Prop name="contentOverflowX" enumValues="visible,hidden,scroll,auto"/>
+<Prop name="contentOverflowY" enumValues="visible,hidden,scroll,auto"/>
+<Prop name="layout" visible="false" type="com.bstek.dorado.view.widget.layout.Layout"/></Props><Children><Child rule="Component" name="Children" aggregated="true"></Child></Children></Rule><Rule name="HtmlContainer" parents="Container" label="HtmlContainer" type="com.bstek.dorado.view.widget.HtmlContainer" sortFactor="2004" category="General" icon="/com/bstek/dorado/view/widget/HtmlContainer.png" clientTypes="desktop,touch"><Props>
+<Prop name="containerExpression"/>
+<Prop name="content" editor="multiLines"/>
+<Prop name="contentFile"/></Props></Rule><Rule name="SubViewHolder" parents="com.bstek.dorado.view.widget.Control" label="SubViewHolder" type="com.bstek.dorado.view.widget.SubViewHolder" sortFactor="2005" category="General" icon="/com/bstek/dorado/view/widget/SubViewHolder.png" clientTypes="desktop,touch"><Props><Prop name="context" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="loadMode" enumValues="preload,lazy,manual"/>
+<Prop name="subView"/></Props><ClientEvents>
+<ClientEvent name="beforeLoad" parameters="self,arg"/>
+<ClientEvent name="onLoad" parameters="self,arg"/>
+<ClientEvent name="onLoadFailure" parameters="self,arg"/></ClientEvents></Rule><Rule name="Action" parents="Component" label="Action" type="com.bstek.dorado.view.widget.action.Action" sortFactor="2006" category="Action" icon="/com/bstek/dorado/view/widget/action/Action.png" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="caption"/>
+<Prop name="confirmMessage"/>
+<Prop name="disabled" type="boolean"/>
+<Prop name="hotkey" enumValues="f1,f2,ctrl+s,alt+s,shift+s,ctrl+alt+shift+s,return,space,backspace,left,right,up,down"/>
+<Prop name="icon"/>
+<Prop name="iconClass"/>
+<Prop name="parameter" editor="any" type="java.lang.Object"/>
+<Prop name="successMessage"/>
+<Prop name="tip"/></Props><ClientEvents>
+<ClientEvent name="onExecute" parameters="self,arg"/>
+<ClientEvent name="beforeExecute" parameters="self,arg"/>
+<ClientEvent name="onFailure" parameters="self,arg"/>
+<ClientEvent name="onSuccess" parameters="self,arg"/></ClientEvents></Rule><Rule name="AjaxAction" parents="AsyncAction" label="AjaxAction" type="com.bstek.dorado.view.widget.action.AjaxAction" sortFactor="2007" category="Action" icon="/com/bstek/dorado/view/widget/action/AjaxAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="batchable" defaultValue="true" type="boolean"/>
+<Prop name="service" highlight="1"/>
+<Prop name="supportsEntity" defaultValue="true" type="boolean"/>
+<Prop name="timeout" type="long"/></Props></Rule><Rule name="UpdateAction" parents="AsyncAction" label="UpdateAction" type="com.bstek.dorado.view.widget.action.UpdateAction" sortFactor="2008" category="Action" icon="/com/bstek/dorado/view/widget/action/UpdateAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="alwaysExecute" type="boolean"/>
+<Prop name="dataResolver" highlight="1" type="com.bstek.dorado.data.resolver.DataResolver"/>
+<Prop name="executingMessage"/></Props><ClientEvents>
+<ClientEvent name="onGetUpdateData" parameters="self,arg"/></ClientEvents><Children><Child rule="UpdateItem" name="UpdateItems" aggregated="true"></Child></Children></Rule><Rule name="FormSubmitAction" parents="Action" label="FormSubmitAction" type="com.bstek.dorado.view.widget.action.FormSubmitAction" sortFactor="2009" category="Action" icon="/com/bstek/dorado/view/widget/action/FormSubmitAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="action"/>
+<Prop name="method" defaultValue="post" enumValues="post,get"/>
+<Prop name="target"/></Props></Rule><Rule name="LongTask" parents="Action" label="LongTask" type="com.bstek.dorado.view.widget.action.LongTask" sortFactor="2010" category="Action" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="appearence" defaultValue="daemonTask" enumValues="none,daemonTask,mainTask"/>
+<Prop name="disableOnActive" defaultValue="true" type="boolean"/>
+<Prop name="taskName" highlight="1"/></Props><ClientEvents>
+<ClientEvent name="onTaskScheduled" parameters="self,arg"/>
+<ClientEvent name="onTaskEnd" parameters="self,arg"/>
+<ClientEvent name="onLog" parameters="self,arg"/>
+<ClientEvent name="onStateChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="Button" parents="AbstractButton" label="Button" type="com.bstek.dorado.view.widget.base.Button" sortFactor="2011" category="General" icon="/com/bstek/dorado/view/widget/base/Button.png" clientTypes="desktop"><Props>
+<Prop name="caption" highlight="1"/>
+<Prop name="height" visible="false"/>
+<Prop name="icon"/>
+<Prop name="iconClass"/>
+<Prop name="showTrigger" type="boolean"/>
+<Prop name="splitButton" type="boolean"/>
+<Prop name="triggerToggled" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onTriggerClick" parameters="self,arg"/></ClientEvents></Rule><Rule name="SimpleButton" parents="AbstractButton" label="SimpleButton" type="com.bstek.dorado.view.widget.base.SimpleButton" sortFactor="2012" category="General" icon="/com/bstek/dorado/view/widget/base/SimpleButton.png" clientTypes="desktop,touch"><Props>
+<Prop name="disabledClassName"/>
+<Prop name="hoverClassName"/>
+<Prop name="mouseDownClassName"/>
+<Prop name="toggledClassName"/></Props></Rule><Rule name="SimpleIconButton" parents="SimpleButton" label="SimpleIconButton" type="com.bstek.dorado.view.widget.base.SimpleIconButton" sortFactor="2013" category="General" icon="/com/bstek/dorado/view/widget/base/SimpleIconButton.png" clientTypes="desktop,touch"><Props>
+<Prop name="icon" highlight="1"/>
+<Prop name="iconClass"/>
+<Prop name="showTrigger" type="boolean"/></Props></Rule><Rule name="Panel" parents="AbstractPanel" label="Panel" type="com.bstek.dorado.view.widget.base.Panel" sortFactor="2014" category="General" icon="/com/bstek/dorado/view/widget/base/Panel.png" clientTypes="desktop"><Props>
+<Prop name="background"/>
+<Prop name="border" defaultValue="normal" enumValues="none,normal,curve" deprecated="true"/>
+<Prop name="closeAction" defaultValue="hide" enumValues="hide,close"/>
+<Prop name="closeable" type="boolean"/>
+<Prop name="collapseable" defaultValue="false" type="boolean"/>
+<Prop name="icon"/>
+<Prop name="iconClass"/>
+<Prop name="maximizeable" type="boolean"/>
+<Prop name="maximized" type="boolean"/>
+<Prop name="showCaptionBar" type="java.lang.Boolean"/></Props><ClientEvents>
+<ClientEvent name="onMaximize" parameters="self,arg"/>
+<ClientEvent name="beforeMaximize" parameters="self,arg"/></ClientEvents><Children><Child name="Tools" fixed="true"><Rule name="Wrapper.Tools" label="Tools" nodeName="Tools" icon="/com/bstek/dorado/view/widget/base/Tools.png"><Children><Child rule="SimpleIconButton" name="Tools" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="GroupBox" parents="AbstractPanel" label="GroupBox" type="com.bstek.dorado.view.widget.base.GroupBox" sortFactor="2015" category="General" icon="/com/bstek/dorado/view/widget/base/GroupBox.png" clientTypes="desktop"></Rule><Rule name="FieldSet" parents="AbstractPanel" label="FieldSet" type="com.bstek.dorado.view.widget.base.FieldSet" sortFactor="2016" category="General" icon="/com/bstek/dorado/view/widget/base/FieldSet.png" clientTypes="desktop"></Rule><Rule name="IFrame" parents="com.bstek.dorado.view.widget.Control" label="IFrame" type="com.bstek.dorado.view.widget.base.IFrame" sortFactor="2017" category="General" icon="/com/bstek/dorado/view/widget/base/IFrame.png" clientTypes="desktop,touch"><Props>
+<Prop name="name"/>
+<Prop name="path"/></Props><ClientEvents>
+<ClientEvent name="onLoad" parameters="self,arg"/></ClientEvents></Rule><Rule name="CardBook" parents="com.bstek.dorado.view.widget.Control" label="CardBook" type="com.bstek.dorado.view.widget.base.CardBook" sortFactor="2018" category="General" icon="/com/bstek/dorado/view/widget/base/CardBook.png" clientTypes="desktop,touch"><Props>
+<Prop name="currentControl" deprecated="true" visible="false" type="int"/>
+<Prop name="currentIndex" type="int"/>
+<Prop name="dynaHeight" defaultValue="false" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="beforeCurrentChange" parameters="self,arg"/>
+<ClientEvent name="onCurrentChange" parameters="self,arg"/></ClientEvents><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Controls" aggregated="true"></Child></Children></Rule><Rule name="TabControl" parents="TabBar" label="TabControl" type="com.bstek.dorado.view.widget.base.tab.TabControl" sortFactor="2019" category="General" icon="/com/bstek/dorado/view/widget/base/tab/TabControl.png" clientTypes="desktop"><Props>
+<Prop name="dynaHeight" defaultValue="false" type="boolean"/></Props><Children><Child rule="IFrameTab" name="IFrameTab" aggregated="true"></Child><Child rule="ControlTab" name="ControlTab" aggregated="true"></Child></Children></Rule><Rule name="VerticalTabControl" parents="TabColumn" label="VerticalTabControl" type="com.bstek.dorado.view.widget.base.tab.VerticalTabControl" sortFactor="2020" category="General" icon="/com/bstek/dorado/view/widget/base/tab/VerticalTabControl.png" clientTypes="desktop"><Props>
+<Prop name="tabColumnWidth" defaultValue="200" type="int"/></Props><Children><Child rule="IFrameTab" name="IFrameTab" aggregated="true"></Child><Child rule="ControlTab" name="ControlTab" aggregated="true"></Child></Children></Rule><Rule name="TabBar" parents="AbstractTabControl" label="TabBar" type="com.bstek.dorado.view.widget.base.tab.TabBar" sortFactor="2021" category="General" icon="/com/bstek/dorado/view/widget/base/tab/TabBar.png" clientTypes="desktop"><Props>
+<Prop name="showMenuButton" type="boolean"/>
+<Prop name="tabMinWidth" type="int"/>
+<Prop name="tabPlacement" defaultValue="top" enumValues="top,bottom"/></Props><Children><Child rule="Tab" name="Tab" aggregated="true" public="false"></Child></Children></Rule><Rule name="TabColumn" parents="AbstractTabControl" label="TabColumn" type="com.bstek.dorado.view.widget.base.tab.TabColumn" sortFactor="2022" category="General" icon="/com/bstek/dorado/view/widget/base/tab/TabColumn.png" clientTypes="desktop"><Props>
+<Prop name="tabPlacement" defaultValue="left" enumValues="left,right"/>
+<Prop name="verticalText" type="boolean"/></Props><Children><Child rule="Tab" name="Tab" aggregated="true" public="false"></Child></Children></Rule><Rule name="ToolBar" parents="com.bstek.dorado.view.widget.Control" label="ToolBar" type="com.bstek.dorado.view.widget.base.toolbar.ToolBar" sortFactor="2023" category="General" icon="/com/bstek/dorado/view/widget/base/toolbar/ToolBar.png" clientTypes="desktop"><Props>
+<Prop name="fixRight" type="boolean"/>
+<Prop name="height" visible="false"/>
+<Prop name="showMenuOnHover" defaultValue="false" type="boolean"/></Props><Children><Child rule="MenuButton" name="MenuButton" aggregated="true"></Child><Child rule="com.bstek.dorado.view.widget.base.toolbar.Label" name="ToolBarLabel" aggregated="true"></Child><Child rule="com.bstek.dorado.view.widget.base.toolbar.Separator" name="Separator" aggregated="true"></Child><Child rule="com.bstek.dorado.view.widget.base.toolbar.Button" name="ToolBarButton" aggregated="true"></Child><Child rule="Fill" name="Fill" aggregated="true"></Child><Child rule="com.bstek.dorado.view.widget.Control" name="Items" aggregated="true"></Child></Children></Rule><Rule name="SplitPanel" parents="com.bstek.dorado.view.widget.Control" label="SplitPanel" type="com.bstek.dorado.view.widget.base.SplitPanel" sortFactor="2024" category="General" icon="/com/bstek/dorado/view/widget/base/SplitPanel.png" clientTypes="desktop"><Props>
+<Prop name="animate" type="java.lang.Boolean"/>
+<Prop name="collapseBothSide" defaultValue="false" type="boolean"/>
+<Prop name="collapseable" defaultValue="true" type="boolean"/>
+<Prop name="collapsed" type="boolean"/>
+<Prop name="direction" defaultValue="left" highlight="1" enumValues="left,top,right,bottom"/>
+<Prop name="maxPosition" type="int"/>
+<Prop name="minPosition" type="int"/>
+<Prop name="openPreviewOnHover" defaultValue="false" type="boolean"/>
+<Prop name="position" defaultValue="100" highlight="1"/>
+<Prop name="previewable" type="boolean"/>
+<Prop name="resizeable" defaultValue="true" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onCollapsedChange" parameters="self,arg"/>
+<ClientEvent name="beforeCollapsedChange" parameters="self,arg"/></ClientEvents><Children><Child name="MainControl" fixed="true"><Rule name="Wrapper.MainControl" label="MainControl" nodeName="MainControl" icon="/com/bstek/dorado/view/widget/base/MainControl.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="MainControl"></Child></Children></Rule></Child><Child name="SideControl" fixed="true"><Rule name="Wrapper.SideControl" label="SideControl" nodeName="SideControl" icon="/com/bstek/dorado/view/widget/base/SideControl.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="SideControl"></Child></Children></Rule></Child></Children></Rule><Rule name="Accordion" parents="com.bstek.dorado.view.widget.Control" label="Accordion" type="com.bstek.dorado.view.widget.base.accordion.Accordion" sortFactor="2025" category="General" icon="/com/bstek/dorado/view/widget/base/accordion/Accordion.png" clientTypes="desktop"><Props>
+<Prop name="animate" type="java.lang.Boolean"/>
+<Prop name="currentSection" type="int"/>
+<Prop name="dynaHeight" defaultValue="false" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="beforeCurrentSectionChange" parameters="self,arg"/>
+<ClientEvent name="onCurrentSectionChange" parameters="self,arg"/></ClientEvents><Children><Child rule="Section" name="Sections" aggregated="true"></Child></Children></Rule><Rule name="Slider" parents="com.bstek.dorado.view.widget.Control" label="Slider" type="com.bstek.dorado.view.widget.base.Slider" sortFactor="2026" category="General" icon="/com/bstek/dorado/view/widget/base/Slider.png" clientTypes="desktop"><Props>
+<Prop name="maxValue" defaultValue="100" type="float"/>
+<Prop name="minValue" type="float"/>
+<Prop name="orientation" defaultValue="horizental" enumValues="horizontal,horizontal,vertical"/>
+<Prop name="precision" type="int"/>
+<Prop name="step" type="float"/>
+<Prop name="value" type="float"/></Props><ClientEvents>
+<ClientEvent name="onValueChange" parameters="self,arg"/>
+<ClientEvent name="beforeValueChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="ProgressBar" parents="AbstractPropertyDataControl" label="ProgressBar" type="com.bstek.dorado.view.widget.base.ProgressBar" sortFactor="2027" category="General" icon="/com/bstek/dorado/view/widget/base/ProgressBar.png" clientTypes="desktop,touch"><Props>
+<Prop name="effectEnable" type="boolean"/>
+<Prop name="maxValue" defaultValue="100" type="float"/>
+<Prop name="minValue" type="float"/>
+<Prop name="showText" defaultValue="true" type="boolean"/>
+<Prop name="textPattern" defaultValue="{percent}%"/>
+<Prop name="value"/></Props></Rule><Rule name="Tip" parents="com.bstek.dorado.view.widget.Control,FloatControl" label="Tip" type="com.bstek.dorado.view.widget.base.Tip" sortFactor="2028" category="Floatable" icon="/com/bstek/dorado/view/widget/base/Tip.png" clientTypes="desktop,touch"><Props>
+<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/>
+<Prop name="anchorTarget" visible="false"/>
+<Prop name="animateTarget" visible="false"/>
+<Prop name="animateType" defaultValue="fade" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="arrowAlign" defaultValue="center" enumValues="center,top,right,bottom,left"/>
+<Prop name="arrowDirection" defaultValue="none" enumValues="top,right,bottom,left,none"/>
+<Prop name="arrowOffset" type="int"/>
+<Prop name="autoAdjustPosition" defaultValue="true" type="boolean"/>
+<Prop name="caption"/>
+<Prop name="center" type="boolean"/>
+<Prop name="closeable" type="boolean"/>
+<Prop name="content" type="java.lang.Object"/>
+<Prop name="continuedFocus" defaultValue="true" type="boolean"/>
+<Prop name="floating" defaultValue="true" type="boolean"/>
+<Prop name="floatingClassName"/>
+<Prop name="focusAfterShow" defaultValue="false" type="boolean"/>
+<Prop name="handleOverflow" defaultValue="true" visible="false" type="boolean"/>
+<Prop name="hideAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="icon" enumValues="INFO,WARNING,ERROR,QUESTION"/>
+<Prop name="left" type="int"/>
+<Prop name="modal" type="boolean"/>
+<Prop name="modalType" enumValues="dark,transparent"/>
+<Prop name="offsetLeft" type="int"/>
+<Prop name="offsetTop" type="int"/>
+<Prop name="shadowMode" defaultValue="drop" enumValues="drop,sides,frame,none"/>
+<Prop name="showAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="showDuration" type="int"/>
+<Prop name="text" editor="multilines"/>
+<Prop name="top" type="int"/>
+<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/>
+<Prop name="visible" type="java.lang.Boolean"/></Props><ClientEvents>
+<ClientEvent name="onClose" parameters="self,arg"/>
+<ClientEvent name="onShow" parameters="self,arg"/>
+<ClientEvent name="beforeHide" parameters="self,arg"/>
+<ClientEvent name="beforeClose" parameters="self,arg"/>
+<ClientEvent name="beforeShow" parameters="self,arg"/>
+<ClientEvent name="onHide" parameters="self,arg"/></ClientEvents></Rule><Rule name="FloatContainer" parents="Container,FloatControl" label="FloatContainer" type="com.bstek.dorado.view.widget.base.FloatContainer" sortFactor="2029" category="Floatable" icon="/com/bstek/dorado/view/widget/base/FloatContainer.png" clientTypes="desktop,touch"><Props>
+<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/>
+<Prop name="anchorTarget" visible="false"/>
+<Prop name="animateTarget" visible="false"/>
+<Prop name="animateType" defaultValue="zoom" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="autoAdjustPosition" defaultValue="true" type="boolean"/>
+<Prop name="center" type="boolean"/>
+<Prop name="continuedFocus" defaultValue="true" type="boolean"/>
+<Prop name="floating" defaultValue="true" type="boolean"/>
+<Prop name="floatingClassName"/>
+<Prop name="focusAfterShow" defaultValue="true" type="boolean"/>
+<Prop name="handleOverflow" defaultValue="true" visible="false" type="boolean"/>
+<Prop name="hideAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="left" type="int"/>
+<Prop name="modal" type="boolean"/>
+<Prop name="modalType" enumValues="dark,transparent"/>
+<Prop name="offsetLeft" type="int"/>
+<Prop name="offsetTop" type="int"/>
+<Prop name="shadowMode" defaultValue="sides" enumValues="drop,sides,frame,none"/>
+<Prop name="showAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="top" type="int"/>
+<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/>
+<Prop name="visible" type="java.lang.Boolean"/></Props><ClientEvents>
+<ClientEvent name="onClose" parameters="self,arg"/>
+<ClientEvent name="onShow" parameters="self,arg"/>
+<ClientEvent name="beforeHide" parameters="self,arg"/>
+<ClientEvent name="beforeClose" parameters="self,arg"/>
+<ClientEvent name="beforeShow" parameters="self,arg"/>
+<ClientEvent name="onHide" parameters="self,arg"/></ClientEvents></Rule><Rule name="FloatPanel" parents="Panel,FloatControl" label="FloatPanel" type="com.bstek.dorado.view.widget.base.FloatPanel" sortFactor="2030" category="Floatable" icon="/com/bstek/dorado/view/widget/base/FloatPanel.png" clientTypes="desktop"><Props>
+<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/>
+<Prop name="anchorTarget" visible="false"/>
+<Prop name="animateTarget" visible="false"/>
+<Prop name="animateType" defaultValue="zoom" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="autoAdjustPosition" defaultValue="true" type="boolean"/>
+<Prop name="center" highlight="1" type="boolean"/>
+<Prop name="continuedFocus" defaultValue="true" type="boolean"/>
+<Prop name="floating" defaultValue="true" type="boolean"/>
+<Prop name="floatingClassName"/>
+<Prop name="focusAfterShow" defaultValue="true" type="boolean"/>
+<Prop name="handleOverflow" defaultValue="true" visible="false" type="boolean"/>
+<Prop name="hideAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="left" type="int"/>
+<Prop name="modal" highlight="1" type="boolean"/>
+<Prop name="modalType" enumValues="dark,transparent"/>
+<Prop name="offsetLeft" type="int"/>
+<Prop name="offsetTop" type="int"/>
+<Prop name="shadowMode" defaultValue="sides" enumValues="drop,sides,frame,none"/>
+<Prop name="showAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="top" type="int"/>
+<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/>
+<Prop name="visible" type="java.lang.Boolean"/></Props><ClientEvents>
+<ClientEvent name="onClose" parameters="self,arg"/>
+<ClientEvent name="onShow" parameters="self,arg"/>
+<ClientEvent name="beforeHide" parameters="self,arg"/>
+<ClientEvent name="beforeClose" parameters="self,arg"/>
+<ClientEvent name="beforeShow" parameters="self,arg"/>
+<ClientEvent name="onHide" parameters="self,arg"/></ClientEvents></Rule><Rule name="Dialog" parents="FloatPanel" label="Dialog" type="com.bstek.dorado.view.widget.base.Dialog" sortFactor="2031" category="Floatable" icon="/com/bstek/dorado/view/widget/base/Dialog.png" clientTypes="desktop"><Props>
+<Prop name="center" defaultValue="true" type="boolean"/>
+<Prop name="closeable" defaultValue="true" type="boolean"/>
+<Prop name="dragOutside" type="boolean"/>
+<Prop name="draggable" defaultValue="true" type="boolean"/>
+<Prop name="maxHeight" type="int"/>
+<Prop name="maxWidth" type="int"/>
+<Prop name="minHeight" type="int"/>
+<Prop name="minWidth" type="int"/>
+<Prop name="minimizeable" type="boolean"/>
+<Prop name="minimized" type="boolean"/>
+<Prop name="modal" defaultValue="true" type="boolean"/>
+<Prop name="resizeable" defaultValue="true" type="boolean"/>
+<Prop name="shadowMode" defaultValue="frame" enumValues="drop,sides,frame,none"/></Props><ClientEvents>
+<ClientEvent name="onMinimize" parameters="self,arg"/>
+<ClientEvent name="beforeMinimize" parameters="self,arg"/></ClientEvents></Rule><Rule name="Menu" parents="com.bstek.dorado.view.widget.Control,FloatControl" label="Menu" type="com.bstek.dorado.view.widget.base.menu.Menu" sortFactor="2032" category="Floatable" icon="/com/bstek/dorado/view/widget/base/menu/Menu.png" autoGenerateId="true" clientTypes="desktop"><Props>
+<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/>
+<Prop name="anchorTarget" visible="false"/>
+<Prop name="animateTarget" visible="false"/>
+<Prop name="animateType" defaultValue="zoom" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="autoAdjustPosition" defaultValue="true" type="boolean"/>
+<Prop name="center" type="boolean"/>
+<Prop name="continuedFocus" defaultValue="true" type="boolean"/>
+<Prop name="floating" defaultValue="true" type="boolean"/>
+<Prop name="floatingClassName"/>
+<Prop name="focusAfterShow" defaultValue="true" type="boolean"/>
+<Prop name="handleOverflow" defaultValue="true" visible="false" type="boolean"/>
+<Prop name="hideAnimateType" defaultValue="fade" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="iconPosition" defaultValue="left" enumValues="left,top"/>
+<Prop name="left" type="int"/>
+<Prop name="modal" type="boolean"/>
+<Prop name="modalType" enumValues="dark,transparent"/>
+<Prop name="offsetLeft" type="int"/>
+<Prop name="offsetTop" type="int"/>
+<Prop name="shadowMode" defaultValue="sides" enumValues="drop,sides,frame,none"/>
+<Prop name="showAnimateType" defaultValue="slide" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="top" type="int"/>
+<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/>
+<Prop name="visible" type="java.lang.Boolean"/></Props><ClientEvents>
+<ClientEvent name="onClose" parameters="self,arg"/>
+<ClientEvent name="onShow" parameters="self,arg"/>
+<ClientEvent name="beforeHide" parameters="self,arg"/>
+<ClientEvent name="beforeClose" parameters="self,arg"/>
+<ClientEvent name="beforeShow" parameters="self,arg"/>
+<ClientEvent name="onHide" parameters="self,arg"/>
+<ClientEvent name="onHideTopMenu" parameters="self,arg"/></ClientEvents><Children><Child rule="BaseMenuItem" name="Items" aggregated="true"></Child></Children></Rule><Rule name="DatePicker" parents="com.bstek.dorado.view.widget.Control" label="DatePicker" nodeName="DatePicker" type="com.bstek.dorado.view.widget.base.DatePicker" sortFactor="2033" category="General" icon="/com/bstek/dorado/view/widget/base/DatePicker.png" clientTypes="desktop"><Props>
+<Prop name="date" type="java.util.Date"/>
+<Prop name="selectionMode" defaultValue="singleDate" enumValues="singleDate,multiDate"/>
+<Prop name="showClearButton" defaultValue="true" type="boolean"/>
+<Prop name="showConfirmButton" defaultValue="true" type="boolean"/>
+<Prop name="showTimeSpinner" defaultValue="false" type="boolean"/>
+<Prop name="showTodayButton" defaultValue="true" type="boolean"/>
+<Prop name="yearMonthFormat"/></Props><ClientEvents>
+<ClientEvent name="onFilterDate" parameters="self,arg"/>
+<ClientEvent name="onClear" parameters="self,arg"/>
+<ClientEvent name="onCancel" parameters="self,arg"/>
+<ClientEvent name="onConfirm" parameters="self,arg"/>
+<ClientEvent name="onRefreshDateCell" parameters="self,arg"/>
+<ClientEvent name="onPick" parameters="self,arg"/></ClientEvents></Rule><Rule name="YearMonthPicker" parents="com.bstek.dorado.view.widget.Control" label="YearMonthPicker" nodeName="YearMonthPicker" type="com.bstek.dorado.view.widget.base.YearMonthPicker" sortFactor="2034" category="General" icon="/com/bstek/dorado/view/widget/base/YearMonthPicker.png" clientTypes="desktop"><Props>
+<Prop name="month" type="int"/>
+<Prop name="year" type="int"/></Props><ClientEvents>
+<ClientEvent name="onPick" parameters="self,arg"/>
+<ClientEvent name="onCancel" parameters="self,arg"/></ClientEvents></Rule><Rule name="Label" parents="AbstractPropertyDataControl" label="Label" type="com.bstek.dorado.view.widget.form.Label" sortFactor="2035" category="Form" icon="/com/bstek/dorado/view/widget/form/Label.png" clientTypes="desktop,touch"><Props>
+<Prop name="text" highlight="1"/>
+<Prop name="ui" enumValues="default,bold,h1,h2,h3"/></Props></Rule><Rule name="DataLabel" parents="AbstractPropertyDataControl" label="DataLabel" type="com.bstek.dorado.view.widget.form.DataLabel" sortFactor="2036" category="Form" icon="/com/bstek/dorado/view/widget/form/DataLabel.png" clientTypes="desktop,touch" deprecated="true"></Rule><Rule name="Link" parents="Label" label="Link" type="com.bstek.dorado.view.widget.form.Link" sortFactor="2037" category="Form" icon="/com/bstek/dorado/view/widget/form/Link.png" clientTypes="desktop,touch"><Props>
+<Prop name="href"/>
+<Prop name="target"/></Props></Rule><Rule name="Image" parents="AbstractPropertyDataControl" label="Image" type="com.bstek.dorado.view.widget.form.Image" sortFactor="2038" category="Form" icon="/com/bstek/dorado/view/widget/form/Image.png" clientTypes="desktop,touch"><Props>
+<Prop name="blankImage"/>
+<Prop name="image" highlight="1"/>
+<Prop name="packMode" defaultValue="center" enumValues="start,center,end"/>
+<Prop name="stretchMode" defaultValue="keepRatio" enumValues="fitWidth,fitHeight,keepRatio,fill,stretch,none"/></Props></Rule><Rule name="TemplateField" parents="AbstractDataControl" label="TemplateField" type="com.bstek.dorado.view.widget.form.TemplateField" sortFactor="2039" category="Form" icon="/com/bstek/dorado/view/widget/form/TemplateField.png" clientTypes="desktop,touch"><Props>
+<Prop name="template" highlight="1" editor="multiLines"/></Props></Rule><Rule name="TextEditor" parents="AbstractTextEditor" label="TextEditor" type="com.bstek.dorado.view.widget.form.TextEditor" sortFactor="2040" category="Form" icon="/com/bstek/dorado/view/widget/form/TextEditor.png" clientTypes="desktop,touch"><Props>
+<Prop name="dataType" type="com.bstek.dorado.data.type.DataType"/>
+<Prop name="displayFormat"/><Prop name="mapping" type="com.bstek.dorado.data.type.property.Mapping" compositeType="Fixed">
+<Prop name="keyProperty"/>
+<Prop name="mapValues" editor="collection[pojo]" type="java.lang.Object"/>
+<Prop name="valueProperty"/></Prop>
+<Prop name="password" visible="false" type="boolean"/>
+<Prop name="typeFormat"/></Props></Rule><Rule name="PasswordEditor" parents="AbstractTextEditor" label="PasswordEditor" type="com.bstek.dorado.view.widget.form.PasswordEditor" sortFactor="2041" category="Form" icon="/com/bstek/dorado/view/widget/form/PasswordEditor.png" clientTypes="desktop,touch"></Rule><Rule name="TextArea" parents="AbstractTextEditor" label="TextArea" type="com.bstek.dorado.view.widget.form.TextArea" sortFactor="2042" category="Form" icon="/com/bstek/dorado/view/widget/form/TextArea.png" clientTypes="desktop,touch"><Props>
+<Prop name="maxLength" type="int"/>
+<Prop name="minLength" type="int"/>
+<Prop name="required" type="boolean"/>
+<Prop name="selectTextOnFocus" defaultValue="false" type="boolean"/>
+<Prop name="text" editor="multiLines"/></Props></Rule><Rule name="CheckBox" parents="AbstractDataEditor" label="CheckBox" type="com.bstek.dorado.view.widget.form.CheckBox" sortFactor="2043" category="Form" icon="/com/bstek/dorado/view/widget/form/CheckBox.png" clientTypes="desktop,touch"><Props>
+<Prop name="caption"/>
+<Prop name="mixedValue" type="java.lang.Object"/>
+<Prop name="offValue" defaultValue="false" type="java.lang.Object"/>
+<Prop name="onValue" defaultValue="true" type="java.lang.Object"/>
+<Prop name="triState" type="boolean"/>
+<Prop name="value" defaultValue="false" type="java.lang.Object"/></Props><ClientEvents>
+<ClientEvent name="onValueChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="RadioGroup" parents="AbstractDataEditor" label="RadioGroup" type="com.bstek.dorado.view.widget.form.RadioGroup" sortFactor="2044" category="Form" icon="/com/bstek/dorado/view/widget/form/RadioGroup.png" clientTypes="desktop,touch"><Props>
+<Prop name="columnCount" defaultValue="3" type="int"/>
+<Prop name="layout" defaultValue="flow" enumValues="vertical,flow,grid"/>
+<Prop name="value" type="java.lang.Object"/></Props><ClientEvents>
+<ClientEvent name="onValueChange" parameters="self,arg"/></ClientEvents><Children><Child rule="RadioButton" name="RadioButtons" aggregated="true"></Child></Children></Rule><Rule name="DataMessage" parents="AbstractPropertyDataControl" label="DataMessage" type="com.bstek.dorado.view.widget.form.DataMessage" sortFactor="2045" category="Form" icon="/com/bstek/dorado/view/widget/form/DataMessage.png" clientTypes="desktop,touch"><Props>
+<Prop name="showIconOnly" type="boolean"/>
+<Prop name="showMultiMessage" type="boolean"/></Props></Rule><Rule name="FormProfile" parents="Component" label="FormProfile" type="com.bstek.dorado.view.widget.form.FormProfile" sortFactor="2046" category="Form" icon="/com/bstek/dorado/view/widget/form/FormProfile.png" clientTypes="desktop,touch"><Props>
+<Prop name="className"/>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="editorWidth" type="int"/>
+<Prop name="exClassName"/>
+<Prop name="height"/>
+<Prop name="hintPosition" enumValues="right,bottom"/>
+<Prop name="hintSpacing" type="int"/>
+<Prop name="hintWidth" type="int"/>
+<Prop name="labelAlign" defaultValue="left" enumValues="left,center,right"/>
+<Prop name="labelPosition" defaultValue="left" enumValues="left,top"/>
+<Prop name="labelSeparator"/>
+<Prop name="labelSpacing" type="int"/>
+<Prop name="labelWidth" type="int"/>
+<Prop name="readOnly" type="boolean"/>
+<Prop name="showHint" defaultValue="true" type="boolean"/>
+<Prop name="showHintMessage" type="boolean"/>
+<Prop name="showLabel" defaultValue="true" type="boolean"/>
+<Prop name="trigger" enumValues="triggerClear,autoMappingDropDown1,autoMappingDropDown2,defaultDateDropDown,defaultDateTimeDropDown,defaultYearMonthDropDown,defaultYearDropDown,defaultMonthDropDown" reference="Trigger:id"/>
+<Prop name="type" defaultValue="text" enumValues="text,password,textArea,checkBox,radioGroup"/>
+<Prop name="ui"/>
+<Prop name="width"/></Props></Rule><Rule name="FormElement" parents="com.bstek.dorado.view.widget.Control" label="FormElement" type="com.bstek.dorado.view.widget.form.FormElement" sortFactor="2047" category="Form" icon="/com/bstek/dorado/view/widget/form/FormElement.png" clientTypes="desktop,touch"><Props>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="editable" defaultValue="true" type="boolean"/>
+<Prop name="editorType" highlight="1" enumValues="TextEditor,PasswordEditor,TextArea,CheckBox,RadioGroup,Label,NumberSpinner"/>
+<Prop name="editorWidth" type="int"/>
+<Prop name="formProfile" reference="FormProfile:id"/>
+<Prop name="hint"/>
+<Prop name="hintPosition" defaultValue="right" enumValues="right,bottom"/>
+<Prop name="hintSpacing" type="int"/>
+<Prop name="hintWidth" type="int"/>
+<Prop name="label" highlight="1"/>
+<Prop name="labelAlign" defaultValue="left" enumValues="left,center,right"/>
+<Prop name="labelPosition" defaultValue="left" enumValues="left,top"/>
+<Prop name="labelSeparator"/>
+<Prop name="labelSpacing" type="int"/>
+<Prop name="labelWidth" type="int"/>
+<Prop name="property" highlight="1"/>
+<Prop name="readOnly" type="boolean"/>
+<Prop name="showHint" defaultValue="true" type="boolean"/>
+<Prop name="showHintMessage" type="boolean"/>
+<Prop name="showLabel" defaultValue="true" type="boolean"/>
+<Prop name="trigger" enumValues="triggerClear,autoMappingDropDown1,autoMappingDropDown2,autoOpenMappingDropDown1,autoOpenMappingDropDown2,defaultDateDropDown,defaultDateTimeDropDown,defaultYearMonthDropDown,defaultYearDropDown,defaultMonthDropDown" reference="Trigger:id"/>
+<Prop name="type" enumValues="text,password,textArea,checkBox,radioGroup" visible="false"/></Props><ClientEvents>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents><Children><Child name="Editor" fixed="true"><Rule name="Wrapper.Editor" label="Editor" nodeName="Editor" icon="/com/bstek/dorado/view/widget/form/Editor.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Editor"></Child></Children></Rule></Child></Children></Rule><Rule name="AutoForm" parents="com.bstek.dorado.view.widget.Control" label="AutoForm" type="com.bstek.dorado.view.widget.form.autoform.AutoForm" sortFactor="2048" category="Form" icon="/com/bstek/dorado/view/widget/form/autoform/AutoForm.png" clientTypes="desktop,touch"><Props>
+<Prop name="autoCreateElements" type="boolean"/>
+<Prop name="colPadding" type="int"/>
+<Prop name="cols" highlight="1"/>
+<Prop name="createOwnEntity" defaultValue="true" type="boolean"/>
+<Prop name="createPrivateDataSet" type="boolean"/>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="dataType" type="com.bstek.dorado.data.type.EntityDataType"/>
+<Prop name="editorWidth" type="int"/>
+<Prop name="formProfile" reference="FormProfile:id"/>
+<Prop name="hintPosition" enumValues="right,bottom"/>
+<Prop name="hintSpacing" type="int"/>
+<Prop name="hintWidth" type="int"/>
+<Prop name="labelAlign" defaultValue="left" enumValues="left,center,right"/>
+<Prop name="labelPosition" defaultValue="left" enumValues="left,top"/>
+<Prop name="labelSeparator"/>
+<Prop name="labelSpacing" type="int"/>
+<Prop name="labelWidth" type="int"/>
+<Prop name="padding" type="int"/>
+<Prop name="readOnly" type="boolean"/>
+<Prop name="rowHeight" type="int"/>
+<Prop name="rowPadding" type="int"/>
+<Prop name="showHint" defaultValue="true" type="boolean"/>
+<Prop name="showHintMessage" type="boolean"/>
+<Prop name="showLabel" defaultValue="true" type="boolean"/>
+<Prop name="stretchWidth" type="boolean"/></Props><Children><Child rule="AutoFormElement" name="AutoFormElement" aggregated="true"></Child><Child rule="com.bstek.dorado.view.widget.Control" name="Elements" aggregated="true"></Child></Children></Rule><Rule name="NumberSpinner" parents="Spinner" label="NumberSpinner" type="com.bstek.dorado.view.widget.form.NumberSpinner" sortFactor="2049" category="Form" icon="/com/bstek/dorado/view/widget/form/NumberSpinner.png" clientTypes="desktop,touch"><Props>
+<Prop name="max" defaultValue="2147483647" type="int"/>
+<Prop name="min" defaultValue="-2147483648" type="int"/>
+<Prop name="selectTextOnFocus" defaultValue="true" type="boolean"/></Props></Rule><Rule name="DateTimeSpinner" parents="Spinner" label="DateTimeSpinner" type="com.bstek.dorado.view.widget.form.DateTimeSpinner" sortFactor="2050" category="Form" icon="/com/bstek/dorado/view/widget/form/DateTimeSpinner.png" clientTypes="desktop,touch"><Props>
+<Prop name="date" type="int"/>
+<Prop name="hours" type="int"/>
+<Prop name="minutes" type="int"/>
+<Prop name="month" type="int"/>
+<Prop name="seconds" type="int"/>
+<Prop name="type" defaultValue="time" enumValues="date,time,dateTime,hours,minutes,dateHours,dateMinutes"/>
+<Prop name="year" type="int"/></Props></Rule><Rule name="CustomSpinner" parents="Spinner" label="CustomSpinner" type="com.bstek.dorado.view.widget.form.CustomSpinner" sortFactor="2051" category="Form" icon="/com/bstek/dorado/view/widget/form/CustomSpinner.png" clientTypes="desktop,touch"><Props>
+<Prop name="pattern" highlight="1"/>
+<Prop name="text" visible="false"/>
+<Prop name="value"/></Props></Rule><Rule name="Trigger" parents="Component" label="Trigger" type="com.bstek.dorado.view.widget.form.trigger.Trigger" sortFactor="2052" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/Trigger.png" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="buttonVisible" defaultValue="true" type="boolean"/>
+<Prop name="editable" defaultValue="true" type="boolean"/>
+<Prop name="icon"/>
+<Prop name="iconClass" enumValues="d-trigger-icon-drop,d-trigger-icon-search,d-trigger-icon-date,d-trigger-icon-custom"/></Props><ClientEvents>
+<ClientEvent name="onExecute" parameters="self,arg"/>
+<ClientEvent name="beforeExecute" parameters="self,arg"/></ClientEvents></Rule><Rule name="ListDropDown" parents="RowListDropDown" label="ListDropDown" type="com.bstek.dorado.view.widget.form.trigger.ListDropDown" sortFactor="2053" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/ListDropDown.png" autoGenerateId="true" clientTypes="desktop"><Props>
+<Prop name="items" highlight="1" editor="collection[any]" type="java.util.List"/></Props></Rule><Rule name="DataSetDropDown" parents="RowListDropDown" label="DataSetDropDown" type="com.bstek.dorado.view.widget.form.trigger.DataSetDropDown" sortFactor="2054" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/DataSetDropDown.png" autoGenerateId="true" clientTypes="desktop"><Props>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="filterMode" defaultValue="serverSide" enumValues="clientSide,serverSide"/>
+<Prop name="filterOnTyping" defaultValue="false" type="boolean"/>
+<Prop name="property" highlight="1"/>
+<Prop name="reloadDataOnOpen" type="boolean"/>
+<Prop name="useDataBinding" defaultValue="true" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="onSetFilterParameter" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="AutoMappingDropDown" parents="RowListDropDown" label="AutoMappingDropDown" type="com.bstek.dorado.view.widget.form.trigger.AutoMappingDropDown" sortFactor="2055" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/AutoMappingDropDown.png" autoGenerateId="true" clientTypes="desktop"><Props>
+<Prop name="dynaFilter" defaultValue="true" type="boolean"/>
+<Prop name="property" defaultValue="value"/></Props></Rule><Rule name="DateDropDown" parents="DropDown" label="DateDropDown" type="com.bstek.dorado.view.widget.form.trigger.DateDropDown" sortFactor="2056" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/DateDropDown.png" autoGenerateId="true" clientTypes="desktop"><Props>
+<Prop name="selectionMode" defaultValue="singleDate" enumValues="singleDate,multiDate"/>
+<Prop name="showConfirmButton" defaultValue="true" type="boolean"/>
+<Prop name="showTimeSpinner" type="boolean"/>
+<Prop name="showTodayButton" defaultValue="true" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onRefreshDateCell" parameters="self,arg"/>
+<ClientEvent name="onFilterDate" parameters="self,arg"/></ClientEvents></Rule><Rule name="YearMonthDropDown" parents="DropDown" label="YearMonthDropDown" type="com.bstek.dorado.view.widget.form.trigger.YearMonthDropDown" sortFactor="2057" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/YearMonthDropDown.png" autoGenerateId="true" clientTypes="desktop"></Rule><Rule name="YearDropDown" parents="DropDown" label="YearDropDown" type="com.bstek.dorado.view.widget.form.trigger.YearDropDown" sortFactor="2058" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/YearDropDown.png" autoGenerateId="true" clientTypes="desktop"></Rule><Rule name="MonthDropDown" parents="DropDown" label="MonthDropDown" type="com.bstek.dorado.view.widget.form.trigger.MonthDropDown" sortFactor="2059" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/MonthDropDown.png" autoGenerateId="true" clientTypes="desktop"></Rule><Rule name="CustomDropDown" parents="DropDown" label="CustomDropDown" type="com.bstek.dorado.view.widget.form.trigger.CustomDropDown" sortFactor="2060" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/CustomDropDown.png" autoGenerateId="true" clientTypes="desktop"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Control"></Child></Children></Rule><Rule name="DataPilot" parents="AbstractDataControl" label="DataPilot" type="com.bstek.dorado.view.widget.datacontrol.DataPilot" sortFactor="2061" category="General" icon="/com/bstek/dorado/view/widget/datacontrol/DataPilot.png" clientTypes="desktop"><Props>
+<Prop name="height" visible="false"/>
+<Prop name="itemCodes" highlight="1" enumValues="pages,|&lt;,&lt;,&gt;,&gt;|,goto,pageSize,info,+,-,x,|"/></Props><ClientEvents>
+<ClientEvent name="onSubControlAction" parameters="self,arg"/>
+<ClientEvent name="onSubControlRefresh" parameters="self,arg"/></ClientEvents></Rule><Rule name="ListBox" parents="AbstractListBox" label="ListBox" type="com.bstek.dorado.view.widget.list.ListBox" sortFactor="2062" category="Collection" icon="/com/bstek/dorado/view/widget/list/ListBox.png" clientTypes="desktop"><Props>
+<Prop name="items" highlight="1" editor="collection[any]" type="java.util.List"/></Props></Rule><Rule name="DataListBox" parents="AbstractListBox" label="DataListBox" type="com.bstek.dorado.view.widget.list.DataListBox" sortFactor="2063" category="Collection" icon="/com/bstek/dorado/view/widget/list/DataListBox.png" clientTypes="desktop"><Props>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/></Props><ClientEvents>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="Grid" parents="AbstractGrid" label="Grid" type="com.bstek.dorado.view.widget.grid.Grid" sortFactor="2064" category="Collection" icon="/com/bstek/dorado/view/widget/grid/Grid.png" clientTypes="desktop"><Props>
+<Prop name="items" highlight="1" editor="collection[pojo]" type="java.util.List"/></Props></Rule><Rule name="DataGrid" parents="AbstractGrid" label="DataGrid" type="com.bstek.dorado.view.widget.grid.DataGrid" sortFactor="2065" category="Collection" icon="/com/bstek/dorado/view/widget/grid/DataGrid.png" clientTypes="desktop"><Props>
+<Prop name="appendOnLastEnter" type="boolean"/>
+<Prop name="autoCreateColumns" type="java.lang.Boolean"/>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="dataType" deprecated="true" type="com.bstek.dorado.data.type.EntityDataType"/>
+<Prop name="filterMode" defaultValue="clientSide" enumValues="clientSide,serverSide"/>
+<Prop name="rowSelectionProperty"/>
+<Prop name="sortMode" defaultValue="clientSide" enumValues="clientSide,serverSide"/>
+<Prop name="supportsPaging" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="Tree" parents="AbstractTree" label="Tree" type="com.bstek.dorado.view.widget.tree.Tree" sortFactor="2066" category="Collection" icon="/com/bstek/dorado/view/widget/tree/Tree.png" clientTypes="desktop"><Children><Child rule="BaseNode" name="Nodes" aggregated="true"></Child></Children></Rule><Rule name="DataTree" parents="AbstractTree" label="DataTree" type="com.bstek.dorado.view.widget.tree.DataTree" sortFactor="2067" category="Collection" icon="/com/bstek/dorado/view/widget/tree/DataTree.png" clientTypes="desktop"><Props>
+<Prop name="currentNodeDataPath"/>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/></Props><ClientEvents>
+<ClientEvent name="onDataNodeCreate" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="beforeDataNodeCreate" parameters="self,arg"/></ClientEvents><Children><Child name="BindingConfigs" fixed="true"><Rule name="Wrapper.BindingConfigs" label="BindingConfigs" nodeName="BindingConfigs" icon="/com/bstek/dorado/view/widget/tree/BindingConfigs.png"><Children><Child rule="BindingConfig" name="BindingConfigs" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="BlockView" parents="AbstractBlockView" label="BlockView" type="com.bstek.dorado.view.widget.blockview.BlockView" sortFactor="2068" category="Collection" icon="/com/bstek/dorado/view/widget/blockview/BlockView.png" clientTypes="desktop,touch"><Props>
+<Prop name="items" highlight="1" editor="collection[any]" type="java.util.List"/></Props></Rule><Rule name="DataBlockView" parents="AbstractBlockView" label="DataBlockView" type="com.bstek.dorado.view.widget.blockview.DataBlockView" sortFactor="2069" category="Collection" icon="/com/bstek/dorado/view/widget/blockview/DataBlockView.png" clientTypes="desktop,touch"><Props>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/></Props><ClientEvents>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="TreeGrid" parents="AbstractTreeGrid" label="TreeGrid" type="com.bstek.dorado.view.widget.treegrid.TreeGrid" sortFactor="2070" category="Collection" icon="/com/bstek/dorado/view/widget/treegrid/TreeGrid.png" clientTypes="desktop"><Children><Child name="Nodes" fixed="true"><Rule name="Wrapper.Nodes" label="Nodes" nodeName="Nodes" icon="/com/bstek/dorado/view/widget/treegrid/Nodes.png"><Children><Child rule="BaseNode" name="Nodes" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="DataTreeGrid" parents="AbstractTreeGrid" label="DataTreeGrid" type="com.bstek.dorado.view.widget.treegrid.DataTreeGrid" sortFactor="2071" category="Collection" icon="/com/bstek/dorado/view/widget/treegrid/DataTreeGrid.png" clientTypes="desktop"><Props>
+<Prop name="autoCreateColumns" type="java.lang.Boolean"/>
+<Prop name="currentNodeDataPath"/>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="dataType" type="com.bstek.dorado.data.type.EntityDataType"/></Props><ClientEvents>
+<ClientEvent name="onDataNodeCreate" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="beforeDataNodeCreate" parameters="self,arg"/></ClientEvents><Children><Child name="BindingConfigs" fixed="true"><Rule name="Wrapper.BindingConfigs" label="BindingConfigs" nodeName="BindingConfigs" icon="/com/bstek/dorado/view/widget/tree/BindingConfigs.png"><Children><Child rule="BindingConfig" name="BindingConfigs" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="TagEditor" parents="AbstractTextEditor" label="TagEditor" type="com.bstek.dorado.view.widget.advance.TagEditor" sortFactor="2072" category="Form" icon="/com/bstek/dorado/view/widget/advance/TagEditor.png" clientTypes="desktop"><Props>
+<Prop name="acceptUnknownTag" defaultValue="true" type="boolean"/>
+<Prop name="availableTags" highlight="1" type="[Ljava.lang.String;"/>
+<Prop name="availableTagsDataPath" highlight="1"/>
+<Prop name="availableTagsDataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="highlightRequiredTags" defaultValue="true" type="boolean"/>
+<Prop name="requiredTags" highlight="1" type="[Ljava.lang.String;"/>
+<Prop name="showAvailableTags" defaultValue="true" type="boolean"/>
+<Prop name="textSeperator" defaultValue=","/></Props><ClientEvents>
+<ClientEvent name="beforeTagAdd" parameters="self,arg"/>
+<ClientEvent name="beforeUnknownTagAccept" parameters="self,arg"/>
+<ClientEvent name="onUnknownTagAccept" parameters="self,arg"/>
+<ClientEvent name="onTagAdd" parameters="self,arg"/>
+<ClientEvent name="beforeTagRemove" parameters="self,arg"/>
+<ClientEvent name="onTagRemove" parameters="self,arg"/></ClientEvents></Rule><Rule name="ColorPicker" parents="com.bstek.dorado.view.widget.Control" label="ColorPicker" type="com.bstek.dorado.view.widget.advance.ColorPicker" sortFactor="2073" category="Form" icon="/com/bstek/dorado/view/widget/advance/ColorPicker.png" clientTypes="desktop"><Props>
+<Prop name="allowEmpty" type="boolean"/>
+<Prop name="color"/>
+<Prop name="disabled" type="boolean"/>
+<Prop name="palette" enumValues="#sixteen,#websafe,#named" type="[Ljava.lang.String;"/>
+<Prop name="preferredFormat" enumValues="none,hex,hex6,hsl,rgb,name"/>
+<Prop name="showAlpha" type="boolean"/>
+<Prop name="showButtons" defaultValue="true" type="boolean"/>
+<Prop name="showInitial" type="boolean"/>
+<Prop name="showInput" type="boolean"/>
+<Prop name="showPalette" type="boolean"/>
+<Prop name="showPaletteOnly" type="boolean"/></Props></Rule><Rule name="ColorEditor" parents="AbstractDataEditor" label="ColorEditor" type="com.bstek.dorado.view.widget.advance.ColorEditor" sortFactor="2074" category="Form" icon="/com/bstek/dorado/view/widget/advance/ColorEditor.png" clientTypes="desktop"><Props>
+<Prop name="allowEmpty" type="boolean"/>
+<Prop name="color"/>
+<Prop name="disabled" type="boolean"/>
+<Prop name="palette" enumValues="#sixteen,#websafe,#named" type="[Ljava.lang.String;"/>
+<Prop name="preferredFormat" defaultValue="name" enumValues="none,hex,hex6,hsl,rgb,name"/>
+<Prop name="showAlpha" type="boolean"/>
+<Prop name="showButtons" defaultValue="true" type="boolean"/>
+<Prop name="showInitial" type="boolean"/>
+<Prop name="showInput" type="boolean"/>
+<Prop name="showPalette" type="boolean"/>
+<Prop name="showPaletteOnly" type="boolean"/></Props></Rule><Rule name="UploadAction" parents="Action" label="UploadAction" type="com.bstek.dorado.uploader.widget.UploadAction" sortFactor="2075" category="Action" icon="/com/bstek/dorado/uploader/widget/UploadAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="autoUpload" defaultValue="true" type="boolean"/>
+<Prop name="confirmMessage" visible="false"/>
+<Prop name="fileResolver" highlight="1"/>
+<Prop name="headers" editor="pojo" type="java.util.Map"/>
+<Prop name="hotkey" visible="false"/>
+<Prop name="maxFileSize" defaultValue="100MB"/>
+<Prop name="runtimes" defaultValue="html5,flash,silverlight,gears,browserplus,html4" visible="false"/>
+<Prop name="selectionMode" defaultValue="singleFile" enumValues="singleFile,multiFiles"/>
+<Prop name="url" defaultValue="&gt;dorado/uploader/fileupload" visible="false"/></Props><ClientEvents>
+<ClientEvent name="beforeExecute" parameters="self,arg" deprecated="true"/>
+<ClientEvent name="onStateChanged" parameters="self,arg"/>
+<ClientEvent name="onError" parameters="self,arg"/>
+<ClientEvent name="onRefresh" parameters="self,arg"/>
+<ClientEvent name="onExecute" parameters="self,arg" deprecated="true"/>
+<ClientEvent name="onChunkUploaded" parameters="self,arg"/>
+<ClientEvent name="onFailure" parameters="self,arg" deprecated="true"/>
+<ClientEvent name="beforeInit" parameters="self,arg"/>
+<ClientEvent name="onFilesAdded" parameters="self,arg"/>
+<ClientEvent name="onFilesRemoved" parameters="self,arg"/>
+<ClientEvent name="onQueueChanged" parameters="self,arg"/>
+<ClientEvent name="beforeFileUpload" parameters="self,arg"/>
+<ClientEvent name="onInit" parameters="self,arg"/>
+<ClientEvent name="beforeFileUploaded" parameters="self,arg"/>
+<ClientEvent name="onUploadProgress" parameters="self,arg"/>
+<ClientEvent name="onFileUploaded" parameters="self,arg"/>
+<ClientEvent name="onUploadComplete" parameters="self,arg"/>
+<ClientEvent name="onSuccess" parameters="self,arg" deprecated="true"/></ClientEvents><Children><Child name="Filters" fixed="true"><Rule name="Wrapper.Filters" label="Filters" nodeName="Filters"><Children><Child rule="Filter" name="Filters" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="DownloadAction" parents="FormSubmitAction" label="DownloadAction" type="com.bstek.dorado.uploader.widget.DownloadAction" sortFactor="2076" category="Action" icon="/com/bstek/dorado/uploader/widget/DownloadAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="action" defaultValue="&gt;dorado/uploader/filedownload" visible="false"/>
+<Prop name="fileProvider" highlight="1"/>
+<Prop name="inlineMode" defaultValue="off" enumValues="none,off,browser"/></Props></Rule><Rule name="Intro" parents="Component" label="Intro" type="com.bstek.dorado.intro.Intro" sortFactor="2077" category="Advance" icon="/com/bstek/dorado/intro/Intro.png" clientTypes="desktop,touch"><Props>
+<Prop name="doneLabel"/>
+<Prop name="exitOnEsc" defaultValue="true" type="boolean"/>
+<Prop name="exitOnOverlayClick" defaultValue="true" type="boolean"/>
+<Prop name="name"/>
+<Prop name="nextLabel"/>
+<Prop name="prevLabel"/>
+<Prop name="showNextButton" defaultValue="true" type="boolean"/>
+<Prop name="showPrevButton" defaultValue="true" type="boolean"/>
+<Prop name="showSkipButton" defaultValue="true" type="boolean"/>
+<Prop name="showStepNumbers" defaultValue="true" type="boolean"/>
+<Prop name="skipLabel"/>
+<Prop name="tooltipClass"/>
+<Prop name="tooltipPosition" highlight="1" enumValues="left,top,right,bottom" deprecated="true"/></Props><ClientEvents>
+<ClientEvent name="onStart" parameters="self,arg"/>
+<ClientEvent name="onChange" parameters="self,arg"/>
+<ClientEvent name="onExit" parameters="self,arg"/>
+<ClientEvent name="onBeforeStart" parameters="self,arg"/>
+<ClientEvent name="onComplete" parameters="self,arg"/>
+<ClientEvent name="onBeforeChange" parameters="self,arg"/></ClientEvents><Children><Child rule="Step" name="Step" aggregated="true"></Child><Child rule="Step" name="Steps" aggregated="true"></Child></Children></Rule><Rule name="Step" label="Step" type="com.bstek.dorado.intro.Step" sortFactor="2078" icon="/com/bstek/dorado/intro/Step.png" clientTypes="desktop,touch"><Props>
+<Prop name="arrowAlign" enumValues="left,top,center,right,bottom"/>
+<Prop name="arrowDirection" enumValues="left,top,right,bottom"/>
+<Prop name="element" highlight="1"/>
+<Prop name="ignored" type="boolean"/>
+<Prop name="intro" editor="multiLines"/>
+<Prop name="name"/>
+<Prop name="position" enumValues="left,top,right,bottom" deprecated="true"/>
+<Prop name="tags"/><Prop name="tooltipPosition" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="userData" type="java.lang.Object"/></Props></Rule><Rule name="SwfViewer" parents="com.bstek.dorado.view.widget.Control" label="SwfViewer" type="com.bstek.bdf2.swfviewer.widget.SwfViewer" sortFactor="2079" category="BDF2" clientTypes="desktop"><Props>
+<Prop name="attributes"/>
+<Prop name="expressInstallSwfurl"/>
+<Prop name="flashvars"/>
+<Prop name="handlerName"/>
+<Prop name="height" defaultValue="400"/>
+<Prop name="parameter"/>
+<Prop name="params"/>
+<Prop name="printEnabled" defaultValue="true" type="boolean"/>
+<Prop name="showType" defaultValue="complex" enumValues="simple,complex"/>
+<Prop name="swfUrl" highlight="1"/>
+<Prop name="version"/>
+<Prop name="width" defaultValue="400"/></Props></Rule><Rule name="Export2ReportAction" parents="AjaxAction" label="Export2ReportAction" type="com.bstek.bdf2.export.view.Export2ReportAction" sortFactor="2080" category="BDF2" icon="/com/bstek/bdf2/export/view/Export2ReportAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props>
+<Prop name="autoDownload" defaultValue="true" type="boolean"/>
+<Prop name="batchable" defaultValue="true" type="boolean"/>
+<Prop name="dataBgColor" defaultValue="#FFFFFF"/>
+<Prop name="dataFontColor" defaultValue="#000000"/>
+<Prop name="dataFontSize" defaultValue="10" type="int"/>
+<Prop name="dataScope" defaultValue="currentPage" enumValues="currentPage,serverAll"/>
+<Prop name="extension" defaultValue="xls" enumValues="xls,xlsx,pdf,csv"/>
+<Prop name="fileName"/>
+<Prop name="headerBgColor" defaultValue="#D8D8D8"/>
+<Prop name="headerFontColor" defaultValue="#000000"/>
+<Prop name="headerFontSize" defaultValue="10" type="int"/>
+<Prop name="interceptorName"/>
+<Prop name="maxSize" defaultValue="1000" type="int"/>
+<Prop name="rowSpace" defaultValue="1" type="int"/>
+<Prop name="showPageNumber" defaultValue="true" type="boolean"/>
+<Prop name="showTitle" defaultValue="false" type="boolean"/>
+<Prop name="template" highlight="1"/>
+<Prop name="timeout" type="long"/>
+<Prop name="titleBgColor" defaultValue="#FFFFFF"/>
+<Prop name="titleFontColor" defaultValue="#000000"/>
+<Prop name="titleFontSize" defaultValue="18" type="int"/>
+<Prop name="titleName"/></Props><ClientEvents>
+<ClientEvent name="onGetExportElement" parameters="self,arg"/>
+<ClientEvent name="onGetExportData" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractViewElement" abstract="true" type="com.bstek.dorado.view.AbstractViewElement"><PrimitiveProps>
+<Prop name="id" highlight="1"/></PrimitiveProps><Props>
+<Prop name="ignored" type="boolean"/><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="tags"/>
+<Prop name="userData" type="java.lang.Object"/></Props></Rule><Rule name="ClientEventSupportedElement" parents="AbstractViewElement" abstract="true" type="com.bstek.dorado.view.ClientEventSupportedElement"></Rule><Rule name="Component" parents="ClientEventSupportedElement" abstract="true" type="com.bstek.dorado.view.widget.Component" scope="protected"><PrimitiveProps>
+<Prop name="listener"/></PrimitiveProps><Props>
+<Prop name="userData" editor="any" type="java.lang.Object"/></Props><ClientEvents>
+<ClientEvent name="onCreate" parameters="self,arg"/>
+<ClientEvent name="onAttributeChange" parameters="self,arg"/>
+<ClientEvent name="onDestroy" parameters="self,arg"/>
+<ClientEvent name="onReady" parameters="self,arg"/></ClientEvents></Rule><Rule name="com.bstek.dorado.view.widget.Control" parents="Component" abstract="true" type="com.bstek.dorado.view.widget.Control" scope="protected" icon="/com/bstek/dorado/view/widget/Control.png" clientTypes="desktop"><PrimitiveProps>
+<Prop name="listener"/></PrimitiveProps><Props>
+<Prop name="className"/>
+<Prop name="dragTags"/>
+<Prop name="draggable" type="boolean"/>
+<Prop name="droppable" type="boolean"/>
+<Prop name="droppableTags"/>
+<Prop name="exClassName"/>
+<Prop name="height"/>
+<Prop name="hideMode" defaultValue="visibility" enumValues="visibility,display"/>
+<Prop name="layoutConstraint" type="java.lang.Object"/>
+<Prop name="lazyInit" type="java.lang.Boolean"/>
+<Prop name="renderOn"/>
+<Prop name="renderTo"/><Prop name="style" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="tip"/>
+<Prop name="ui" defaultValue="default"/>
+<Prop name="visible" type="java.lang.Boolean"/>
+<Prop name="width"/></Props><ClientEvents>
+<ClientEvent name="onKeyDown" parameters="self,arg"/>
+<ClientEvent name="onClick" parameters="self,arg" clientTypes="desktop"/>
+<ClientEvent name="onKeyPress" parameters="self,arg"/>
+<ClientEvent name="beforeRefreshDom" parameters="self,arg"/>
+<ClientEvent name="onRefreshDom" parameters="self,arg"/>
+<ClientEvent name="onDragMove" parameters="self,arg"/>
+<ClientEvent name="onSwipe" parameters="self,arg" clientTypes="touch"/>
+<ClientEvent name="onDoubleClick" parameters="self,arg" clientTypes="desktop"/>
+<ClientEvent name="onDraggingSourceOver" parameters="self,arg"/>
+<ClientEvent name="onTap" parameters="self,arg" clientTypes="touch"/>
+<ClientEvent name="onGetDraggingIndicator" parameters="self,arg"/>
+<ClientEvent name="onDraggingSourceMove" parameters="self,arg"/>
+<ClientEvent name="onCreateDom" parameters="self,arg"/>
+<ClientEvent name="onDraggingSourceOut" parameters="self,arg"/>
+<ClientEvent name="onDragStart" parameters="self,arg"/>
+<ClientEvent name="onMouseDown" parameters="self,arg"/>
+<ClientEvent name="onContextMenu" parameters="self,arg"/>
+<ClientEvent name="beforeDraggingSourceDrop" parameters="self,arg"/>
+<ClientEvent name="onTapHold" parameters="self,arg" clientTypes="touch"/>
+<ClientEvent name="onDraggingSourceDrop" parameters="self,arg"/>
+<ClientEvent name="onFocus" parameters="self,arg"/>
+<ClientEvent name="onDoubleTap" parameters="self,arg" clientTypes="touch"/>
+<ClientEvent name="onBlur" parameters="self,arg"/>
+<ClientEvent name="onResize" parameters="self,arg"/>
+<ClientEvent name="onDragStop" parameters="self,arg"/>
+<ClientEvent name="onMouseUp" parameters="self,arg"/></ClientEvents></Rule><Rule name="AsyncAction" parents="Action" abstract="true" type="com.bstek.dorado.view.widget.action.AsyncAction" scope="protected"><Props>
+<Prop name="async" defaultValue="true" type="boolean"/>
+<Prop name="executingMessage"/>
+<Prop name="modal" defaultValue="true" type="boolean"/></Props></Rule><Rule name="UpdateItem" label="UpdateItem" type="com.bstek.dorado.view.widget.action.UpdateItem" icon="/com/bstek/dorado/view/widget/action/UpdateItem.png"><Props>
+<Prop name="alias"/>
+<Prop name="autoResetEntityState" defaultValue="true" type="boolean"/>
+<Prop name="dataPath" defaultValue="!DIRTY_TREE" enumValues="!DIRTY_TREE,!CASCADE_DIRTY,[#dirty],[#all],[#visible],[#current]"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="firstResultOnly" type="boolean"/>
+<Prop name="refreshMode" defaultValue="value" enumValues="none,state,value,cascade"/>
+<Prop name="submitDeletedEntity" type="java.lang.Boolean"/>
+<Prop name="submitOldData" type="boolean"/>
+<Prop name="submitSimplePropertyOnly" type="boolean"/>
+<Prop name="validateData" defaultValue="true" type="boolean"/></Props></Rule><Rule name="AbstractButton" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.base.AbstractButton" scope="protected" clientTypes="desktop"><Props>
+<Prop name="action" highlight="1" reference="Action:id"/>
+<Prop name="disabled" type="boolean"/>
+<Prop name="menu" reference="Menu:id"/>
+<Prop name="toggleOnShowMenu" defaultValue="true" type="boolean"/>
+<Prop name="toggleable" type="boolean"/>
+<Prop name="toggled" type="boolean"/></Props></Rule><Rule name="AbstractPanel" parents="Container" abstract="true" type="com.bstek.dorado.view.widget.base.AbstractPanel" scope="protected" clientTypes="desktop"><Props>
+<Prop name="buttonAlign" defaultValue="center" enumValues="left,center,right"/>
+<Prop name="caption"/>
+<Prop name="collapseable" defaultValue="true" type="boolean"/>
+<Prop name="collapsed" defaultValue="false" type="boolean"/>
+<Prop name="lazyInitChildren" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onCollapsedChange" parameters="self,arg"/>
+<ClientEvent name="beforeCollapsedChange" parameters="self,arg"/></ClientEvents><Children><Child name="Buttons" fixed="true"><Rule name="Wrapper.Buttons" label="Buttons" nodeName="Buttons" icon="/com/bstek/dorado/view/widget/base/Buttons.png"><Children><Child rule="Button" name="Buttons" aggregated="true"></Child></Children></Rule></Child><Child name="Children" fixed="true"><Rule name="Wrapper.Children" label="Children" nodeName="Children" icon="/com/bstek/dorado/view/widget/base/Children.png"><Children><Child rule="Component" name="Children" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="IFrameTab" parents="Tab" label="IFrameTab" type="com.bstek.dorado.view.widget.base.tab.IFrameTab" scope="protected" icon="/com/bstek/dorado/view/widget/base/tab/IFrameTab.png"><Props>
+<Prop name="iframeHeight" type="java.lang.Integer"/>
+<Prop name="path" highlight="1"/></Props></Rule><Rule name="Tab" parents="ClientEventSupportedElement" label="Tab" type="com.bstek.dorado.view.widget.base.tab.Tab" scope="protected" icon="/com/bstek/dorado/view/widget/base/tab/Tab.png"><Props>
+<Prop name="caption" highlight="1"/>
+<Prop name="className"/>
+<Prop name="closeable" type="boolean"/>
+<Prop name="disabled" type="boolean"/>
+<Prop name="exClassName" deprecated="true"/>
+<Prop name="height"/>
+<Prop name="icon"/>
+<Prop name="iconClass"/>
+<Prop name="name"/><Prop name="style" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="tip"/>
+<Prop name="visible" defaultValue="true" type="boolean"/>
+<Prop name="width"/></Props><ClientEvents>
+<ClientEvent name="onClose" parameters="self,arg"/>
+<ClientEvent name="onClick" parameters="self,arg"/>
+<ClientEvent name="beforeClose" parameters="self,arg"/></ClientEvents></Rule><Rule name="ControlTab" parents="Tab" label="ControlTab" type="com.bstek.dorado.view.widget.base.tab.ControlTab" scope="protected" icon="/com/bstek/dorado/view/widget/base/tab/ControlTab.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Control"></Child></Children></Rule><Rule name="AbstractTabControl" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.base.tab.AbstractTabControl" scope="protected" clientTypes="desktop"><Props>
+<Prop name="alwaysShowNavButtons" type="boolean"/>
+<Prop name="currentTab" type="int"/></Props><ClientEvents>
+<ClientEvent name="onTabContextMenu" parameters="self,arg"/>
+<ClientEvent name="onTabChange" parameters="self,arg"/>
+<ClientEvent name="onTabRemove" parameters="self,arg"/>
+<ClientEvent name="beforeTabChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="MenuButton" parents="Button" label="MenuButton" nodeName="MenuButton" type="com.bstek.dorado.view.widget.base.toolbar.MenuButton" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/MenuButton.png" clientTypes="desktop"><Props>
+<Prop name="hideMenuOnMouseLeave" type="boolean"/>
+<Prop name="hideMenuOnMouseLeaveDelay" defaultValue="300" type="int"/>
+<Prop name="menu" deprecated="true" visible="false"/>
+<Prop name="showMenuOnHover" defaultValue="false" type="boolean"/></Props><Children><Child rule="BaseMenuItem" name="Items" aggregated="true"></Child></Children></Rule><Rule name="BaseMenuItem" parents="ClientEventSupportedElement" abstract="true" type="com.bstek.dorado.view.widget.base.menu.BaseMenuItem"><Props>
+<Prop name="className"/>
+<Prop name="exClassName"/>
+<Prop name="height"/>
+<Prop name="name"/><Prop name="style" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="tip"/>
+<Prop name="visible" defaultValue="true" type="boolean"/>
+<Prop name="width"/></Props></Rule><Rule name="MenuItem" parents="TextMenuItem" label="MenuItem" type="com.bstek.dorado.view.widget.base.menu.MenuItem" icon="/com/bstek/dorado/view/widget/base/menu/MenuItem.png" clientTypes="desktop"><Children><Child rule="BaseMenuItem" name="Items" aggregated="true"></Child></Children></Rule><Rule name="TextMenuItem" parents="BaseMenuItem" abstract="true" type="com.bstek.dorado.view.widget.base.menu.TextMenuItem"><Props>
+<Prop name="action" reference="Action:id"/>
+<Prop name="caption"/>
+<Prop name="disabled" type="boolean"/>
+<Prop name="hideOnClick" defaultValue="true" type="boolean"/>
+<Prop name="icon"/>
+<Prop name="iconClass"/></Props><ClientEvents>
+<ClientEvent name="onClick" parameters="self,arg"/></ClientEvents></Rule><Rule name="Separator" parents="BaseMenuItem" label="Separator" type="com.bstek.dorado.view.widget.base.menu.Separator" icon="/com/bstek/dorado/view/widget/base/menu/Separator.png" clientTypes="desktop,touch"></Rule><Rule name="CheckableMenuItem" parents="MenuItem" label="CheckableMenuItem" type="com.bstek.dorado.view.widget.base.menu.CheckableMenuItem" icon="/com/bstek/dorado/view/widget/base/menu/CheckableMenuItem.png" clientTypes="desktop"><Props>
+<Prop name="checked" type="boolean"/>
+<Prop name="group"/></Props><ClientEvents>
+<ClientEvent name="onCheckedChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="ControlMenuItem" parents="TextMenuItem" label="ControlMenuItem" type="com.bstek.dorado.view.widget.base.menu.ControlMenuItem" icon="/com/bstek/dorado/view/widget/base/menu/ControlMenuItem.png" clientTypes="desktop"><Children><Child rule="FloatControl" name="Control"></Child></Children></Rule><Rule name="FloatControl" abstract="true" type="com.bstek.dorado.view.widget.FloatControl"><Props>
+<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/>
+<Prop name="anchorTarget" visible="false"/>
+<Prop name="animateTarget" visible="false"/>
+<Prop name="animateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="autoAdjustPosition" type="boolean"/>
+<Prop name="center" type="boolean"/>
+<Prop name="continuedFocus" type="boolean"/>
+<Prop name="floating" type="boolean"/>
+<Prop name="floatingClassName"/>
+<Prop name="focusAfterShow" type="boolean"/>
+<Prop name="handleOverflow" visible="false" type="boolean"/>
+<Prop name="hideAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="left" type="int"/>
+<Prop name="modal" type="boolean"/>
+<Prop name="modalType" enumValues="dark,transparent"/>
+<Prop name="offsetLeft" type="int"/>
+<Prop name="offsetTop" type="int"/>
+<Prop name="shadowMode" enumValues="drop,sides,frame,none"/>
+<Prop name="showAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/>
+<Prop name="top" type="int"/>
+<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/></Props></Rule><Rule name="com.bstek.dorado.view.widget.base.toolbar.Label" parents="com.bstek.dorado.view.widget.Control" label="Label" nodeName="ToolBarLabel" type="com.bstek.dorado.view.widget.base.toolbar.Label" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/Label.png" clientTypes="desktop"><Props>
+<Prop name="text"/></Props></Rule><Rule name="com.bstek.dorado.view.widget.base.toolbar.Separator" parents="com.bstek.dorado.view.widget.Control" label="Separator" type="com.bstek.dorado.view.widget.base.toolbar.Separator" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/Separator.png" clientTypes="desktop"></Rule><Rule name="com.bstek.dorado.view.widget.base.toolbar.Button" parents="Button" label="ToolBarButton" nodeName="ToolBarButton" type="com.bstek.dorado.view.widget.base.toolbar.Button" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/Button.png" clientTypes="desktop"><Props>
+<Prop name="hideMenuOnMouseLeave" type="boolean"/>
+<Prop name="hideMenuOnMouseLeaveDelay" defaultValue="300" type="int"/>
+<Prop name="showMenuOnHover" defaultValue="false" type="boolean"/></Props></Rule><Rule name="Fill" parents="com.bstek.dorado.view.widget.Control" label="Fill" type="com.bstek.dorado.view.widget.base.toolbar.Fill" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/Fill.png" clientTypes="desktop"></Rule><Rule name="Section" parents="ClientEventSupportedElement" label="Section" type="com.bstek.dorado.view.widget.base.accordion.Section" icon="/com/bstek/dorado/view/widget/base/accordion/Section.png"><Props>
+<Prop name="caption"/>
+<Prop name="className"/>
+<Prop name="disabled" type="boolean"/>
+<Prop name="exClassName"/>
+<Prop name="icon"/>
+<Prop name="iconClass"/>
+<Prop name="name"/><Prop name="style" type="java.util.Map" compositeType="Open"></Prop>
+<Prop name="tip"/>
+<Prop name="visible" defaultValue="true" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onCaptionClick" parameters="self,arg"/></ClientEvents><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Control"></Child></Children></Rule><Rule name="AbstractDataControl" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.datacontrol.AbstractDataControl" scope="protected" clientTypes="desktop"><Props>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/></Props><ClientEvents>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractPropertyDataControl" parents="AbstractDataControl" abstract="true" type="com.bstek.dorado.view.widget.datacontrol.AbstractPropertyDataControl" scope="protected" clientTypes="desktop"><Props>
+<Prop name="property" highlight="1"/></Props><ClientEvents>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractEditor" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.form.AbstractEditor" scope="protected" clientTypes="desktop"><Props>
+<Prop name="readOnly" type="boolean"/>
+<Prop name="supportsDirtyFlag" defaultValue="true" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onPost" parameters="self,arg"/>
+<ClientEvent name="beforePost" parameters="self,arg"/>
+<ClientEvent name="onPostFailed" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractDataEditor" parents="AbstractEditor" abstract="true" type="com.bstek.dorado.view.widget.form.AbstractDataEditor" scope="protected" clientTypes="desktop"><Props>
+<Prop name="dataPath" highlight="1"/>
+<Prop name="dataSet" highlight="1" reference="DataSet:id"/>
+<Prop name="property" highlight="1"/></Props><ClientEvents>
+<ClientEvent name="onGetBindingData" parameters="self,arg"/>
+<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractTextBox" parents="AbstractDataEditor" abstract="true" type="com.bstek.dorado.view.widget.form.AbstractTextBox" scope="protected" clientTypes="desktop"><Props>
+<Prop name="text"/>
+<Prop name="trigger" enumValues="triggerClear,autoMappingDropDown1,autoMappingDropDown2,autoOpenMappingDropDown1,autoOpenMappingDropDown2,defaultDateDropDown,defaultDateTimeDropDown,defaultYearMonthDropDown,defaultYearDropDown,defaultMonthDropDown" reference="Trigger:id"/></Props><ClientEvents>
+<ClientEvent name="onValidationStateChange" parameters="self,arg"/>
+<ClientEvent name="onTriggerClick" parameters="self,arg"/>
+<ClientEvent name="onTextEdit" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractTextEditor" parents="AbstractTextBox" abstract="true" type="com.bstek.dorado.view.widget.form.AbstractTextEditor" scope="protected" clientTypes="desktop"><Props>
+<Prop name="blankText"/>
+<Prop name="editable" defaultValue="true" type="boolean"/>
+<Prop name="maxLength" type="int"/>
+<Prop name="minLength" type="int"/>
+<Prop name="required" type="boolean"/>
+<Prop name="selectTextOnFocus" defaultValue="true" type="boolean"/></Props></Rule><Rule name="RadioButton" label="RadioButton" type="com.bstek.dorado.view.widget.form.RadioButton" icon="/com/bstek/dorado/view/widget/form/RadioButton.png"><Props>
+<Prop name="readOnly" type="boolean"/>
+<Prop name="text"/>
+<Prop name="value" type="java.lang.Object"/></Props></Rule><Rule name="AutoFormElement" parents="FormElement" label="AutoFormElement" type="com.bstek.dorado.view.widget.form.autoform.AutoFormElement" scope="protected" category="AutoForm" icon="/com/bstek/dorado/view/widget/form/autoform/AutoFormElement.png" labelProperty="id,name,property" clientTypes="desktop,touch"><Props>
+<Prop name="name"/></Props></Rule><Rule name="Spinner" parents="AbstractTextBox" abstract="true" type="com.bstek.dorado.view.widget.form.Spinner" scope="protected" clientTypes="desktop"><Props>
+<Prop name="postValueOnSpin" defaultValue="true" type="boolean"/>
+<Prop name="showSpinTrigger" defaultValue="true" type="boolean"/>
+<Prop name="step" defaultValue="1" type="int"/></Props></Rule><Rule name="DropDown" parents="Trigger" abstract="true" type="com.bstek.dorado.view.widget.form.trigger.DropDown" scope="protected"><Props>
+<Prop name="assignmentMap"/>
+<Prop name="autoOpen" type="boolean"/>
+<Prop name="height" type="int"/>
+<Prop name="maxHeight" type="int"/>
+<Prop name="maxWidth" type="int"/>
+<Prop name="minHeight" type="int"/>
+<Prop name="minWidth" type="int"/>
+<Prop name="postValueOnSelect" defaultValue="true" type="boolean"/>
+<Prop name="width" type="int"/></Props><ClientEvents>
+<ClientEvent name="onValueSelect" parameters="self,arg"/>
+<ClientEvent name="onClose" parameters="self,arg"/>
+<ClientEvent name="onOpen" parameters="self,arg"/></ClientEvents></Rule><Rule name="RowListDropDown" parents="DropDown" abstract="true" type="com.bstek.dorado.view.widget.form.trigger.RowListDropDown" scope="protected"><Props>
+<Prop name="displayProperty"/>
+<Prop name="dynaFilter" type="boolean"/>
+<Prop name="filterOnOpen" type="boolean"/>
+<Prop name="filterOnTyping" defaultValue="true" type="boolean"/>
+<Prop name="minFilterInterval" defaultValue="300" type="int"/>
+<Prop name="property" highlight="1"/>
+<Prop name="useEmptyItem" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onFilterItems" parameters="self,arg"/>
+<ClientEvent name="onFilterItem" parameters="self,arg"/></ClientEvents><Children><Child rule="Column" name="Columns" aggregated="true"></Child></Children></Rule><Rule name="Column" parents="ClientEventSupportedElement" abstract="true" type="com.bstek.dorado.view.widget.grid.Column"><Props>
+<Prop name="align" enumValues="left,center,right"/>
+<Prop name="caption"/>
+<Prop name="headerAlign" defaultValue="center" enumValues="left,center,right"/>
+<Prop name="headerRenderer"/>
+<Prop name="name"/>
+<Prop name="supportsOptionMenu" defaultValue="true" type="boolean"/>
+<Prop name="visible" defaultValue="true" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onGetCellEditor" parameters="self,arg"/>
+<ClientEvent name="onHeaderClick" parameters="self,arg"/>
+<ClientEvent name="onRenderHeaderCell" parameters="self,arg"/></ClientEvents></Rule><Rule name="RowSelectorColumn" parents="AbstractDataColumn" label="RowSelectorColumn" type="com.bstek.dorado.view.widget.grid.RowSelectorColumn" icon="/com/bstek/dorado/view/widget/grid/RowSelectorColumn.png"></Rule><Rule name="AbstractDataColumn" parents="Column" abstract="true" type="com.bstek.dorado.view.widget.grid.AbstractDataColumn"><Props>
+<Prop name="filterBarRenderer"/>
+<Prop name="footerRenderer"/>
+<Prop name="renderer"/>
+<Prop name="resizeable" defaultValue="true" type="boolean"/>
+<Prop name="width"/></Props><ClientEvents>
+<ClientEvent name="onRenderFooterCell" parameters="self,arg"/>
+<ClientEvent name="onRenderCell" parameters="self,arg"/></ClientEvents></Rule><Rule name="IndicatorColumn" parents="AbstractDataColumn" label="IndicatorColumn" type="com.bstek.dorado.view.widget.grid.IndicatorColumn" icon="/com/bstek/dorado/view/widget/grid/IndicatorColumn.png"></Rule><Rule name="RowNumColumn" parents="AbstractDataColumn" label="RowNumColumn" type="com.bstek.dorado.view.widget.grid.RowNumColumn" icon="/com/bstek/dorado/view/widget/grid/RowNumColumn.png"></Rule><Rule name="DataColumn" parents="AbstractDataColumn" label="DataColumn" type="com.bstek.dorado.view.widget.grid.DataColumn" icon="/com/bstek/dorado/view/widget/grid/DataColumn.png" labelProperty="name,property"><Props>
+<Prop name="align" enumValues="left,center,right"/>
+<Prop name="dataType" type="com.bstek.dorado.data.type.DataType"/>
+<Prop name="defaultFilterOperator"/>
+<Prop name="displayFormat"/>
+<Prop name="editable" defaultValue="true" type="boolean"/>
+<Prop name="editorType" defaultValue="TextEditor" highlight="1" enumValues="None,TextEditor,PasswordEditor,TextArea,CheckBox,RadioGroup,NumberSpinner"/>
+<Prop name="filterable" defaultValue="true" type="boolean"/>
+<Prop name="property" highlight="1"/>
+<Prop name="readOnly" type="boolean"/>
+<Prop name="required" type="boolean"/>
+<Prop name="sortState" defaultValue="none" enumValues="none,asc,desc"/>
+<Prop name="summaryType" enumValues="sum,average,count,max,min"/>
+<Prop name="trigger" enumValues="triggerClear,autoMappingDropDown1,autoMappingDropDown2,autoOpenMappingDropDown1,autoOpenMappingDropDown2,defaultDateDropDown,defaultDateTimeDropDown,defaultYearMonthDropDown,defaultYearDropDown,defaultMonthDropDown" reference="Trigger:id"/>
+<Prop name="typeFormat"/>
+<Prop name="wrappable" type="boolean"/></Props><Children><Child name="Editor" fixed="true"><Rule name="Wrapper.Editor" label="Editor" nodeName="Editor" icon="/com/bstek/dorado/view/widget/grid/Editor.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Editor"></Child></Children></Rule></Child></Children></Rule><Rule name="ColumnGroup" parents="Column" label="ColumnGroup" type="com.bstek.dorado.view.widget.grid.ColumnGroup" icon="/com/bstek/dorado/view/widget/grid/ColumnGroup.png"><Props>
+<Prop name="align" enumValues="left,center,right" visible="false"/></Props><Children><Child rule="Column" name="Columns" aggregated="true"></Child></Children></Rule><Rule name="AbstractList" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.list.AbstractList" scope="protected" clientTypes="desktop"><Props>
+<Prop name="allowNoCurrent" type="boolean"/>
+<Prop name="dragMode" defaultValue="item" enumValues="item,control,itemOrControl"/>
+<Prop name="dropMode" defaultValue="insertItems" enumValues="onControl,onItem,insertItems,onOrInsertItems,onAnyWhere"/>
+<Prop name="scrollMode" defaultValue="lazyRender" enumValues="simple,lazyRender,viewport"/>
+<Prop name="selectionMode" defaultValue="none" enumValues="none,singleRow,multiRows"/>
+<Prop name="useNativeScrollbars" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onCompareItems" parameters="self,arg"/>
+<ClientEvent name="onCurrentChange" parameters="self,arg"/>
+<ClientEvent name="onFilterItem" parameters="self,arg"/>
+<ClientEvent name="onSelectionChange" parameters="self,arg"/>
+<ClientEvent name="beforeSelectionChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="RowList" parents="AbstractList" abstract="true" type="com.bstek.dorado.view.widget.list.RowList" scope="protected" clientTypes="desktop"><Props>
+<Prop name="highlightCurrentRow" defaultValue="true" type="boolean"/>
+<Prop name="highlightHoverRow" defaultValue="true" type="boolean"/>
+<Prop name="highlightSelectedRow" defaultValue="true" type="boolean"/>
+<Prop name="rowHeight" type="int"/></Props><ClientEvents>
+<ClientEvent name="onDataRowClick" parameters="self,arg"/>
+<ClientEvent name="onDataRowDoubleClick" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractListBox" parents="RowList" abstract="true" type="com.bstek.dorado.view.widget.list.AbstractListBox" scope="protected" clientTypes="desktop"><Props>
+<Prop name="property"/>
+<Prop name="renderer"/></Props><ClientEvents>
+<ClientEvent name="onRenderRow" parameters="self,arg"/></ClientEvents></Rule><Rule name="GridSupport" parents="RowList" abstract="true" type="com.bstek.dorado.view.widget.grid.GridSupport" scope="protected" clientTypes="desktop"><Props>
+<Prop name="cellRenderer"/>
+<Prop name="dynaRowHeight" type="boolean"/>
+<Prop name="fixedColumnCount" type="int"/>
+<Prop name="footerRenderer"/>
+<Prop name="footerRowHeight" type="int"/>
+<Prop name="headerRenderer"/>
+<Prop name="headerRowHeight" type="int"/>
+<Prop name="readOnly" type="boolean"/>
+<Prop name="rowRenderer"/>
+<Prop name="showFooter" type="boolean"/>
+<Prop name="showHeader" defaultValue="true" type="boolean"/>
+<Prop name="stretchColumnsMode" defaultValue="auto" enumValues="auto,off,stretchableColumns,lastColumn,allColumns,allResizeableColumns"/></Props><ClientEvents>
+<ClientEvent name="beforeCellValueEdit" parameters="self,arg"/>
+<ClientEvent name="onGetCellEditor" parameters="self,arg"/>
+<ClientEvent name="onRenderRow" parameters="self,arg"/>
+<ClientEvent name="onRenderFooterCell" parameters="self,arg"/>
+<ClientEvent name="onCellValueEdit" parameters="self,arg"/>
+<ClientEvent name="onRenderCell" parameters="self,arg"/>
+<ClientEvent name="onHeaderClick" parameters="self,arg"/>
+<ClientEvent name="onRenderHeaderCell" parameters="self,arg"/></ClientEvents><Children><Child rule="Column" name="Columns" aggregated="true"></Child></Children></Rule><Rule name="AbstractGrid" parents="GridSupport" abstract="true" type="com.bstek.dorado.view.widget.grid.AbstractGrid" scope="protected" clientTypes="desktop"><Props>
+<Prop name="filterBarRenderer"/>
+<Prop name="groupFooterRenderer"/>
+<Prop name="groupHeaderRenderer"/>
+<Prop name="groupOnSort" defaultValue="true" type="boolean"/>
+<Prop name="groupProperty"/>
+<Prop name="showFilterBar" type="boolean"/>
+<Prop name="showGroupFooter" type="boolean"/></Props></Rule><Rule name="AbstractTree" parents="RowList" abstract="true" type="com.bstek.dorado.view.widget.tree.AbstractTree" scope="protected" clientTypes="desktop"><Props>
+<Prop name="defaultExpandedIcon"/>
+<Prop name="defaultExpandedIconClass"/>
+<Prop name="defaultIcon"/>
+<Prop name="defaultIconClass"/>
+<Prop name="dropMode" defaultValue="onItem" enumValues="onControl,onItem,insertItems,onOrInsertItems,onAnyWhere"/>
+<Prop name="expandingAnimated" defaultValue="true" type="boolean"/>
+<Prop name="expandingMode" defaultValue="async" enumValues="async,sync"/>
+<Prop name="indent" type="int"/>
+<Prop name="renderer"/>
+<Prop name="scrollMode" enumValues="simple,lazyRender,viewport"/>
+<Prop name="showLines" type="boolean"/></Props><ClientEvents>
+<ClientEvent name="onRenderNode" parameters="self,arg"/>
+<ClientEvent name="onCollapse" parameters="self,arg"/>
+<ClientEvent name="onNodeAttached" parameters="self,arg"/>
+<ClientEvent name="beforeNodeCheckedChange" parameters="self,arg"/>
+<ClientEvent name="onExpand" parameters="self,arg"/>
+<ClientEvent name="beforeCollapse" parameters="self,arg"/>
+<ClientEvent name="beforeCurrentChange" parameters="self,arg"/>
+<ClientEvent name="beforeExpand" parameters="self,arg"/>
+<ClientEvent name="onNodeDetached" parameters="self,arg"/>
+<ClientEvent name="onNodeCheckedChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="BaseNode" abstract="true" type="com.bstek.dorado.view.widget.tree.BaseNode"><Props>
+<Prop name="autoCheckChildren" defaultValue="true" type="boolean"/>
+<Prop name="checkable" type="boolean"/>
+<Prop name="checked" type="boolean"/>
+<Prop name="data" type="java.lang.Object"/>
+<Prop name="expanded" type="boolean"/>
+<Prop name="expandedIcon"/>
+<Prop name="expandedIconClass"/>
+<Prop name="hasChild" type="boolean"/>
+<Prop name="icon"/>
+<Prop name="iconClass"/>
+<Prop name="ignored" type="boolean"/>
+<Prop name="label"/>
+<Prop name="tags"/>
+<Prop name="tip"/>
+<Prop name="userData" type="java.lang.Object"/></Props><Children><Child rule="BaseNode" name="Nodes" aggregated="true"></Child></Children></Rule><Rule name="Node" parents="BaseNode" label="Node" type="com.bstek.dorado.view.widget.tree.Node" icon="/com/bstek/dorado/view/widget/tree/Node.png"><PrimitiveProps>
+<Prop name="id" highlight="1"/></PrimitiveProps><Props><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop></Props></Rule><Rule name="BindingConfig" label="BindingConfig" type="com.bstek.dorado.view.widget.tree.BindingConfig" icon="/com/bstek/dorado/view/widget/tree/BindingConfig.png"><Props>
+<Prop name="autoCheckChildren" defaultValue="true" type="boolean"/>
+<Prop name="checkable" type="boolean"/>
+<Prop name="checkedProperty"/>
+<Prop name="childrenProperty"/>
+<Prop name="expandLevel" type="int"/>
+<Prop name="expandedIcon"/>
+<Prop name="expandedIconClass"/>
+<Prop name="expandedIconProperty"/>
+<Prop name="hasChild" type="java.lang.Boolean"/>
+<Prop name="hasChildProperty"/>
+<Prop name="icon"/>
+<Prop name="iconClass"/>
+<Prop name="iconProperty"/>
+<Prop name="ignored" type="boolean"/>
+<Prop name="labelProperty"/>
+<Prop name="name"/>
+<Prop name="recursive" type="boolean"/>
+<Prop name="tags"/>
+<Prop name="tipProperty"/></Props><Children><Child rule="BindingConfig" name="ChildBindingConfigs" aggregated="true"></Child></Children></Rule><Rule name="AbstractBlockView" parents="AbstractList" abstract="true" type="com.bstek.dorado.view.widget.blockview.AbstractBlockView" scope="protected" clientTypes="desktop"><Props>
+<Prop name="blockDecoratorSize" defaultValue="4" type="int"/>
+<Prop name="blockHeight" defaultValue="80" type="int"/>
+<Prop name="blockLayout" defaultValue="vertical" enumValues="vertical,horizontal"/>
+<Prop name="blockWidth" defaultValue="80" type="int"/>
+<Prop name="fillLine" type="boolean"/>
+<Prop name="horiPadding" defaultValue="8" type="int"/>
+<Prop name="horiSpacing" defaultValue="8" type="int"/>
+<Prop name="lineSize" type="int"/>
+<Prop name="renderer"/>
+<Prop name="vertPadding" defaultValue="8" type="int"/>
+<Prop name="vertSpacing" defaultValue="8" type="int"/></Props><ClientEvents>
+<ClientEvent name="onBlockClick" parameters="self,arg" clientTypes="desktop"/>
+<ClientEvent name="onBlockDoubleClick" parameters="self,arg" clientTypes="desktop"/>
+<ClientEvent name="onRenderBlock" parameters="self,arg"/>
+<ClientEvent name="onBlockTap" parameters="self,arg" clientTypes="touch"/>
+<ClientEvent name="onBlockMouseDown" parameters="self,arg"/>
+<ClientEvent name="onBlockMouseUp" parameters="self,arg"/>
+<ClientEvent name="onBlockTapHold" parameters="self,arg" clientTypes="touch"/></ClientEvents></Rule><Rule name="AbstractTreeGrid" parents="GridSupport" abstract="true" type="com.bstek.dorado.view.widget.treegrid.AbstractTreeGrid" scope="protected" clientTypes="desktop"><Props>
+<Prop name="defaultExpandedIcon"/>
+<Prop name="defaultExpandedIconClass"/>
+<Prop name="defaultIcon"/>
+<Prop name="defaultIconClass"/>
+<Prop name="dropMode" defaultValue="onItem" enumValues="onControl,onItem,insertItems,onOrInsertItems,onAnyWhere"/>
+<Prop name="expandingAnimated" defaultValue="true" type="boolean"/>
+<Prop name="expandingMode" defaultValue="async" enumValues="async,sync"/>
+<Prop name="indent" type="int"/>
+<Prop name="showLines" type="boolean"/>
+<Prop name="treeColumn" highlight="1"/></Props><ClientEvents>
+<ClientEvent name="onRenderNode" parameters="self,arg"/>
+<ClientEvent name="onCollapse" parameters="self,arg"/>
+<ClientEvent name="onNodeAttached" parameters="self,arg"/>
+<ClientEvent name="beforeNodeCheckedChange" parameters="self,arg"/>
+<ClientEvent name="onExpand" parameters="self,arg"/>
+<ClientEvent name="beforeCollapse" parameters="self,arg"/>
+<ClientEvent name="beforeExpand" parameters="self,arg"/>
+<ClientEvent name="onNodeDetached" parameters="self,arg"/>
+<ClientEvent name="onNodeCheckedChange" parameters="self,arg"/></ClientEvents><Children><Child name="Columns" fixed="true"><Rule name="Wrapper.Columns" label="Columns" nodeName="Columns" icon="/com/bstek/dorado/view/widget/treegrid/Columns.png"><Children><Child rule="Column" name="Columns" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="Filter" label="Filter" type="com.bstek.dorado.uploader.widget.Filter" labelProperty="title"><Props>
+<Prop name="extensions"/>
+<Prop name="title"/></Props></Rule><Rule name="DefaultView" parents="View" label="View" nodeName="View" type="com.bstek.dorado.view.DefaultView" category="General" icon="/com/bstek/dorado/view/DefaultView.png" clientTypes="desktop"></Rule></RuleSet>
\ No newline at end of file
diff --git a/igds-recir/.gitignore b/igds-recir/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/igds-recir/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/igds-security/src/main/java/com/ld/igds/models/SecSnapConf.java b/igds-security/src/main/java/com/ld/igds/models/SecSnapConf.java
new file mode 100644
index 0000000..1432f61
--- /dev/null
+++ b/igds-security/src/main/java/com/ld/igds/models/SecSnapConf.java
@@ -0,0 +1,55 @@
+package com.ld.igds.models;
+
+import com.bstek.dorado.annotation.PropertyDef;
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.util.Date;
+
+/**
+ * 浠撳唴瑙嗛鎶撴媿閰嶇疆
+ */
+@Data
+@Entity
+@Table(name = "D_SEC_SNAP_CONF")
+public class SecSnapConf {
+    @Id
+    @Column(name = "ID_", length = 40)
+    @PropertyDef(label = "涓婚敭")
+    private String id;
+
+    @Column(name = "COMPANY_ID_", length = 10)
+    @PropertyDef(label = "缁勭粐缂栫爜")
+    private String companyId;
+
+    @Column(name = "DEPT_ID_", length = 30)
+    @PropertyDef(label = "鎵�灞炲垎搴�")
+    private String deptId;
+
+    @Column(name = "DEPOT_ID_", length = 50)
+    @PropertyDef(label = "鎵�灞炰粨搴�")
+    private String depotId;
+
+    @Column(name = "CAMERA_ID_", length = 50)
+    @PropertyDef(label = "鍏宠仈鎽勫儚澶�")
+    private String cameraId;
+
+    @Column(name = "ACT_HOUR1_")
+    @PropertyDef(label = "鎵ц鏃堕棿1")
+    private int actHour1;
+
+    @Column(name = "ACT_HOUR2_")
+    @PropertyDef(label = "鎵ц鏃堕棿2")
+    private int actHour2;
+
+    @Column(name = "ACT_HOUR3_")
+    @PropertyDef(label = "鎵ц鏃堕棿3")
+    private int actHour3;
+
+    @Column(name = "UPDATE_TIME_")
+    @PropertyDef(label = "鏇存柊鏃堕棿")
+    private Date updateTime;
+}
diff --git a/igds-security/src/main/java/com/ld/igds/models/SecSnapDepot.java b/igds-security/src/main/java/com/ld/igds/models/SecSnapDepot.java
new file mode 100644
index 0000000..5e528d0
--- /dev/null
+++ b/igds-security/src/main/java/com/ld/igds/models/SecSnapDepot.java
@@ -0,0 +1,86 @@
+package com.ld.igds.models;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.bstek.dorado.annotation.PropertyDef;
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.util.Date;
+
+/**
+ * 浠撳唴瑙嗛鍥惧儚鏁版嵁琛�
+ */
+@Data
+@Entity
+@Table(name = "D_SEC_SNAP_DEPOT")
+public class SecSnapDepot {
+
+    @Id
+    @Column(name = "ID_", length = 40)
+    @PropertyDef(label = "涓婚敭")
+    private String id;
+
+    @Column(name = "COMPANY_ID_", length = 10)
+    @PropertyDef(label = "缁勭粐缂栫爜")
+    private String companyId;
+
+    @Column(name = "DEPT_ID_", length = 30)
+    @PropertyDef(label = "鎵�灞炲垎搴�")
+    private String deptId;
+
+    @Column(name = "DEPOT_ID_", length = 50)
+    @PropertyDef(label = "鎵�灞炰粨搴�")
+    private String depotId;
+
+    @Column(name = "CAMERA_ID_", length = 50)
+    @PropertyDef(label = "鍏宠仈鎽勫儚澶�")
+    private String cameraId;
+
+    @Column(name = "RESULT_", length = 30)
+    @PropertyDef(label = "鎶撴媿缁撴灉")
+    private String result = "SUCCESS";
+
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    @Column(name = "UPDATE_TIME_")
+    @PropertyDef(label = "鎶撴媿鏃堕棿")
+    private Date updateTime;
+
+    @Column(name = "FILE_SUFFIX_", length = 4)
+    @PropertyDef(label = "鍥惧儚鏂囦欢鍚庣紑鍚�")
+    private String fileSuffix = "jpg";
+
+    @Column(name = "FILE_NAME_", length = 100)
+    @PropertyDef(label = "鏂囦欢鍚嶇О")
+    private String fileName;
+
+    @Column(name = "PRESET_ ", length = 4)
+    @PropertyDef(label = "棰勭疆浣嶇紪鍙�")
+    private String preset;
+
+    public SecSnapDepot() {
+    }
+
+    public SecSnapDepot(String id, String companyId, String deptId, String depotId, String cameraId, String result, Date updateTime, String fileSuffix, String fileName, String preset) {
+        this.id = id;
+        this.companyId = companyId;
+        this.deptId = deptId;
+        this.depotId = depotId;
+        this.cameraId = cameraId;
+        this.result = result;
+        this.updateTime = updateTime;
+        this.fileSuffix = fileSuffix;
+        this.fileName = fileName;
+        this.preset = preset;
+    }
+
+    public SecSnapDepot(String tag) {
+        if ("TEST".equals(tag)) {
+            this.id = "TEST";
+            this.fileName = "./static/images/img-fail.jpg";
+            this.updateTime = new Date();
+        }
+    }
+}
diff --git a/igds-security/src/main/java/com/ld/igds/sec/service/SecSnapDepotService.java b/igds-security/src/main/java/com/ld/igds/sec/service/SecSnapDepotService.java
new file mode 100644
index 0000000..84d83de
--- /dev/null
+++ b/igds-security/src/main/java/com/ld/igds/sec/service/SecSnapDepotService.java
@@ -0,0 +1,151 @@
+package com.ld.igds.sec.service;
+
+import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
+import com.bstek.dorado.data.provider.Page;
+import com.ld.igds.models.SecSnapConf;
+import com.ld.igds.models.SecSnapDepot;
+import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.DateUtil;
+
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public class SecSnapDepotService extends HibernateDao {
+
+
+    public void pageSnapDepot(Page<SecSnapDepot> page, Map<String, Object> param) throws Exception {
+
+        String hql = " from " + SecSnapDepot.class.getName()
+                + " where companyId=:companyId and deptId=:deptId";
+
+        Map<String, Object> args = new HashMap<>();
+
+        args.put("companyId", param.get("companyId"));
+        args.put("deptId", param.get("deptId"));
+
+        String str = (String) param.get("depotId");
+        if (StringUtils.isNotEmpty(str)) {
+            hql += " and depotId =:depotId";
+            args.put("depotId", str);
+        }
+
+        Date date = (Date) param.get("start");
+        if (null != date) {
+            hql += " and updateTime >=:start";
+            args.put("start", DateUtil.getCurZero(date));
+        }
+        date = (Date) param.get("end");
+        if (null != date) {
+            hql += " and updateTime <:end";
+            args.put("end", DateUtil.getNextZero(date));
+        }
+
+        String countHql = "select count(1) " + hql;
+
+        hql += " order by updateTime desc";
+
+        this.pagingQuery(page, hql, countHql, args);
+    }
+    
+    
+    /**
+     * 鏍规嵁鏉′欢鑾峰彇閰嶇疆绫诲埆
+     *
+     * @param companyId 缁勭粐缂栫爜锛屼笉鍙负绌�
+     * @param deptId    鎵�灞炲垎搴擄紝鍙负绌�
+     * @return 鏌ヨ缁撴灉
+     */
+    public List<SecSnapConf> listSnapConf(String companyId, String deptId) {
+        String hql = " from " + SecSnapConf.class.getName()
+                + " where companyId=:companyId";
+
+        Map<String, Object> args = new HashMap<>();
+        args.put("companyId", companyId);
+        if (StringUtils.isNotEmpty(deptId)) {
+            hql += " and deptId =:deptId";
+            args.put("deptId", deptId);
+        }
+
+        return this.query(hql, args);
+    }
+
+    public void addData(SecSnapConf snapConf, String fileName, String result) {
+        Session session = this.getSessionFactory().openSession();
+        try {
+            SecSnapDepot data = new SecSnapDepot();
+            data.setId(ContextUtil.getUUID());
+            data.setCompanyId(snapConf.getCompanyId());
+            data.setDeptId(snapConf.getDeptId());
+            data.setDepotId(snapConf.getDepotId());
+            data.setCameraId(snapConf.getCameraId());
+            data.setResult(result);
+            data.setUpdateTime(new Date());
+            data.setFileSuffix("jpg");
+            data.setFileName(fileName);
+            session.save(data);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            session.flush();
+            session.close();
+        }
+    }
+
+
+	public void addConf(SecSnapConf conf) {
+		Session session = this.getSessionFactory().openSession();
+        try {
+        	conf.setId(ContextUtil.getUUID());
+        	conf.setUpdateTime(new Date());
+            session.save(conf);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            session.flush();
+            session.close();
+        }
+	}
+
+
+	public void updateConf(SecSnapConf conf) {
+		Session session = this.getSessionFactory().openSession();
+        try {
+        	conf.setUpdateTime(new Date());
+            session.update(conf);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            session.flush();
+            session.close();
+        }
+	}
+
+
+	public void updateActHour(SecSnapConf conf) {
+		String hql = " update "+SecSnapConf.class.getName()+" set actHour1=:actHour1,actHour2=:actHour2,actHour3=:actHour3 where companyId=:companyId and deptId=:deptId";
+		
+		Session session = this.getSessionFactory().openSession();
+        try {
+        	Query q = session.createQuery(hql);
+        	q.setInteger("actHour1", conf.getActHour1());
+        	q.setInteger("actHour2", conf.getActHour2());
+        	q.setInteger("actHour3", conf.getActHour3());
+        	q.setString("companyId", conf.getCompanyId());
+        	q.setString("deptId", conf.getDeptId());
+            q.executeUpdate();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            session.flush();
+            session.close();
+        }
+	}
+}
diff --git a/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepot.view.xml b/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepot.view.xml
new file mode 100644
index 0000000..b1a6b4a
--- /dev/null
+++ b/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepot.view.xml
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model>
+    <DataType name="dtMain">
+      <Property name="creationType">com.ld.igds.models.SecSnapDepot</Property>
+      <PropertyDef name="id">
+        <Property></Property>
+        <Property name="label">涓婚敭</Property>
+      </PropertyDef>
+      <PropertyDef name="companyId">
+        <Property></Property>
+        <Property name="label">缁勭粐缂栫爜</Property>
+      </PropertyDef>
+      <PropertyDef name="deptId">
+        <Property></Property>
+        <Property name="label">鎵�灞炲垎搴�</Property>
+      </PropertyDef>
+      <PropertyDef name="depotId">
+        <Property></Property>
+        <Property name="label">鎵�灞炰粨搴�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;depotPR#getAllCache&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="cameraId">
+        <Property></Property>
+        <Property name="label">鍏宠仈鎽勫儚澶�</Property>
+      </PropertyDef>
+      <PropertyDef name="updateTime">
+        <Property name="dataType">Date</Property>
+        <Property name="label">鏇存柊鏃堕棿</Property>
+      </PropertyDef>
+      <PropertyDef name="result">
+        <Property></Property>
+        <Property name="label">鎶撴媿缁撴灉</Property>
+      </PropertyDef>
+      <PropertyDef name="fileSuffix">
+        <Property></Property>
+        <Property name="label">鍥惧儚鏂囦欢鍚庣紑鍚�</Property>
+      </PropertyDef>
+      <PropertyDef name="fileName">
+        <Property></Property>
+        <Property name="label">鏂囦欢鍚嶇О</Property>
+      </PropertyDef>
+      <PropertyDef name="preset">
+        <Property></Property>
+        <Property name="label">棰勭疆浣嶇紪鍙�</Property>
+      </PropertyDef>
+    </DataType>
+    <DataType name="dtConf">
+      <Property name="creationType">com.ld.igds.models.SecSnapConf</Property>
+      <PropertyDef name="id">
+        <Property></Property>
+        <Property name="label">涓婚敭</Property>
+      </PropertyDef>
+      <PropertyDef name="companyId">
+        <Property></Property>
+        <Property name="label">缁勭粐缂栫爜</Property>
+      </PropertyDef>
+      <PropertyDef name="deptId">
+        <Property></Property>
+        <Property name="label">鎵�灞炲垎搴�</Property>
+      </PropertyDef>
+      <PropertyDef name="updateTime">
+        <Property name="dataType">Date</Property>
+        <Property name="label">鏇存柊鏃堕棿</Property>
+      </PropertyDef>
+      <PropertyDef name="depotId">
+        <Property></Property>
+        <Property name="label">鎵�灞炰粨搴�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;depotPR#getAllCache&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="cameraId">
+        <Property></Property>
+        <Property name="label">鍏宠仈鎽勫儚澶�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;securityPR#listCamera&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="actHour1">
+        <Property name="dataType">int</Property>
+        <Property name="label">绗竴娆�</Property>
+        <Property name="displayFormat"># 鐐�</Property>
+      </PropertyDef>
+      <PropertyDef name="actHour2">
+        <Property name="dataType">int</Property>
+        <Property name="label">绗簩娆�</Property>
+        <Property name="displayFormat"># 鐐�</Property>
+      </PropertyDef>
+      <PropertyDef name="actHour3">
+        <Property name="dataType">int</Property>
+        <Property name="label">绗笁娆�</Property>
+        <Property name="displayFormat"># 鐐�</Property>
+      </PropertyDef>
+    </DataType>
+    <DataType name="dtQuery">
+      <PropertyDef name="depotId">
+        <Property></Property>
+        <Property name="label">鎵�灞炰粨搴�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;depotPR#getAllCache&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="start">
+        <Property name="label">璧峰鏃ユ湡</Property>
+        <Property name="dataType">Date</Property>
+      </PropertyDef>
+      <PropertyDef name="end">
+        <Property name="label">鎴鏃ユ湡</Property>
+        <Property name="dataType">Date</Property>
+      </PropertyDef>
+      <PropertyDef name="actHour1">
+        <Property name="dataType">int</Property>
+        <Property name="label">绗竴娆�</Property>
+      </PropertyDef>
+      <PropertyDef name="actHour2">
+        <Property name="dataType">int</Property>
+        <Property name="label">绗簩娆�</Property>
+      </PropertyDef>
+      <PropertyDef name="actHour3">
+        <Property name="dataType">int</Property>
+        <Property name="label">绗笁娆�</Property>
+      </PropertyDef>
+    </DataType>
+  </Model>
+  <View layout="padding:5;regionPadding:5">
+    <Property name="packages">font-awesome,css-common</Property>
+    <DataSet id="dsMain">
+      <Property name="loadMode">lazy</Property>
+      <Property name="dataType">[dtMain]</Property>
+      <Property name="dataProvider">secSnapDepotPR#pageSnapDepot</Property>
+      <Property name="pageSize">12</Property>
+    </DataSet>
+    <DataSet id="dsConf">
+      <Property name="dataType">[dtConf]</Property>
+      <Property name="dataProvider">secSnapDepotPR#listConf</Property>
+    </DataSet>
+    <DataSet id="dsQuery">
+      <ClientEvent name="onReady">self.insert({});</ClientEvent>
+      <Property name="dataType">dtQuery</Property>
+    </DataSet>
+    <DataSet id="dsParam">
+      <Property name="dataType">dtConf</Property>
+      <Property name="dataProvider">secSnapDepotPR#getConfActHour</Property>
+    </DataSet>
+    <Panel layout="regionPadding:10">
+      <Property name="caption">瑙嗛鍥惧儚淇℃伅绠$悊</Property>
+      <Property name="iconClass">fa fa-bars</Property>
+      <Buttons/>
+      <Children>
+        <Container>
+          <Property name="contentOverflow">hidden</Property>
+          <Property name="exClassName">bg-color</Property>
+          <AutoForm>
+            <Property name="cols">80,*,*,*,400</Property>
+            <Property name="dataSet">dsQuery</Property>
+            <Label>
+              <Property name="text">鏌ヨ鏉′欢锛�</Property>
+            </Label>
+            <AutoFormElement>
+              <Property name="name">depotId</Property>
+              <Property name="property">depotId</Property>
+              <Editor/>
+            </AutoFormElement>
+            <AutoFormElement>
+              <Property name="name">start</Property>
+              <Property name="property">start</Property>
+              <Editor/>
+            </AutoFormElement>
+            <AutoFormElement>
+              <Property name="name">end</Property>
+              <Property name="property">end</Property>
+              <Editor/>
+            </AutoFormElement>
+            <Container layout="regionPadding:10">
+              <Button layoutConstraint="left">
+                <ClientEvent name="onClick">var entity = view.get(&quot;#dsQuery.data:#&quot;);&#xD;
+view.get(&quot;#dsMain&quot;).set(&quot;parameter&quot;,entity).flushAsync(function(){&#xD;
+	$notify(&quot;鏌ヨ鎴愬姛锛�&quot;);&#xD;
+});</ClientEvent>
+                <Property name="caption">鏌ヨ</Property>
+                <Property name="exClassName">btn-normal</Property>
+                <Property name="iconClass">fa fa-search</Property>
+              </Button>
+              <Button layoutConstraint="left">
+                <ClientEvent name="onClick">view.get(&quot;#dsQuery&quot;).setData({});</ClientEvent>
+                <Property name="caption">閲嶇疆</Property>
+                <Property name="exClassName">btn-warn</Property>
+                <Property name="iconClass">fa fa-refresh</Property>
+                <Property name="ignored">true</Property>
+              </Button>
+              <Button layoutConstraint="left">
+                <ClientEvent name="onClick">view.get(&quot;#dialogConf&quot;).show();</ClientEvent>
+                <Property name="caption">鎶撴媿閰嶇疆</Property>
+                <Property name="exClassName">btn-default</Property>
+                <Property name="iconClass">fa fa-cogs</Property>
+              </Button>
+              <Button layoutConstraint="left">
+                <Property name="caption">鎵嬪姩鎶撴媿</Property>
+                <Property name="exClassName">btn-warn</Property>
+                <Property name="iconClass">fa fa-cogs</Property>
+                <Property name="action">ajaxSnapHand</Property>
+              </Button>
+            </Container>
+          </AutoForm>
+        </Container>
+        <Container layoutConstraint="center">
+          <Property name="exClassName">bg-color</Property>
+          <DataBlockView>
+            <ClientEvent name="onRenderBlock">var id = arg.data.get(&quot;id&quot;);&#xD;
+var time = arg.data.get(&quot;updateTime&quot;).formatDate(&quot;Y-m-d H:i&quot;);&#xD;
+var timeStr = arg.data.get(&quot;updateTime&quot;).formatDate(&quot;Ymd&quot;);&#xD;
+var depotId = arg.data.getText(&quot;depotId&quot;);&#xD;
+var imgSrc = &quot;../../basic/file/get-snap-depot?fileName=&quot;+arg.data.get(&quot;fileName&quot;)+&quot;&amp;timeStr=&quot;+timeStr;&#xD;
+var htm = &quot;&lt;div>&lt;img src='./static/images/img-fail.jpg' style='height:250px; width:100%;'>&lt;div>&lt;span style='padding-left:10px;'>浠撳簱锛氭湭鏌ヨ鍒版暟鎹�&lt;/span>&lt;span style='float:right;padding-right:10px;'>鏃堕棿锛�&quot;+time+&quot;&lt;/span>&lt;/div>&lt;/div>&quot;;&#xD;
+if(&quot;TEST&quot; != id){&#xD;
+	htm = &quot;&lt;div>&lt;img src='&quot;+imgSrc+&quot;' style='height:250px; width:100%;'>&lt;div>&lt;span style='padding-left:10px;'>浠撳簱锛�&quot;+depotId+&quot;&lt;/span>&lt;span style='float:right;padding-right:10px;'>鏃堕棿锛�&quot;+time+&quot;&lt;/span>&lt;/div>&lt;/div>&quot;;&#xD;
+}&#xD;
+arg.dom.innerHTML = htm;&#xD;
+arg.progressDefault=false;</ClientEvent>
+            <Property name="dataSet">dsMain</Property>
+            <Property name="blockHeight">300</Property>
+            <Property name="blockWidth">390</Property>
+            <Property name="blockLayout">vertical</Property>
+            <Property name="horiPadding">15</Property>
+            <Property name="horiSpacing">15</Property>
+            <Property name="vertPadding">15</Property>
+            <Property name="vertSpacing">15</Property>
+            <Property name="lineSize">4</Property>
+          </DataBlockView>
+        </Container>
+        <ToolBar layoutConstraint="bottom">
+          <Fill/>
+          <DataPilot layoutConstraint="right">
+            <Property name="dataSet">dsMain</Property>
+            <Property name="itemCodes">pageSize,pages</Property>
+          </DataPilot>
+        </ToolBar>
+      </Children>
+      <Tools/>
+    </Panel>
+    <Dialog id="dialogConf">
+      <Property name="width">750</Property>
+      <Property name="caption">浠撳唴鎶撴媿閰嶇疆</Property>
+      <Buttons/>
+      <Children>
+        <FieldSet>
+          <Property name="caption">鎶撴媿鎽勫儚澶撮厤缃�</Property>
+          <Buttons>
+            <Button>
+              <ClientEvent name="onClick">view.get(&quot;#dsConf&quot;).insert();</ClientEvent>
+              <Property name="caption">鏂板閰嶇疆</Property>
+            </Button>
+            <Button>
+              <Property name="caption">淇濆瓨閰嶇疆</Property>
+              <Property name="action">updateConf</Property>
+            </Button>
+          </Buttons>
+          <Children>
+            <DataGrid layoutConstraint="padding:10px">
+              <Property name="dataSet">dsConf</Property>
+              <Property name="height">400</Property>
+              <RowNumColumn/>
+              <DataColumn name="depotId">
+                <Property name="property">depotId</Property>
+              </DataColumn>
+              <DataColumn name="cameraId">
+                <Property name="property">cameraId</Property>
+              </DataColumn>
+            </DataGrid>
+          </Children>
+        </FieldSet>
+        <FieldSet>
+          <Property name="caption">鎶撴媿鏃堕棿閰嶇疆</Property>
+          <Property name="height">150</Property>
+          <Buttons>
+            <Button>
+              <ClientEvent name="onClick">var data = view.get(&quot;#dsParam.data&quot;);&#xD;
+view.get(&quot;#ajaxSnapTime&quot;).set(&quot;parameter&quot;,data).execute();</ClientEvent>
+              <Property name="caption">淇濆瓨鎶撴椂闂�</Property>
+            </Button>
+          </Buttons>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsParam</Property>
+              <Property name="cols">*,*,*</Property>
+              <Property name="labelAlign">right</Property>
+              <AutoFormElement>
+                <Property name="name">actHour1</Property>
+                <Property name="property">actHour1</Property>
+                <Property name="trigger">listHour</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">actHour2</Property>
+                <Property name="property">actHour2</Property>
+                <Property name="trigger">listHour</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">actHour3</Property>
+                <Property name="property">actHour3</Property>
+                <Property name="trigger">listHour</Property>
+                <Editor/>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <AjaxAction id="ajaxDel">
+      <Property name="service">videoImgPR#delData</Property>
+      <Property name="confirmMessage">褰撳墠鏁版嵁鍒犻櫎鍚庢棤娉曟仮澶嶏紝璇风‘璁よ鍒犻櫎涔堬紵</Property>
+    </AjaxAction>
+    <UpdateAction id="updateConf">
+      <Property name="dataResolver">secSnapDepotPR#updateConf</Property>
+      <UpdateItem>
+        <Property name="dataSet">dsConf</Property>
+      </UpdateItem>
+    </UpdateAction>
+    <AjaxAction id="ajaxSnapTime">
+      <Property name="service">secSnapDepotPR#updateActHour</Property>
+    </AjaxAction>
+    <ListDropDown id="listHour">
+      <Property name="items">0,7,8,9,10,11,12,13,14,15,16,17,18</Property>
+    </ListDropDown>
+    <AjaxAction id="ajaxSnapHand">
+      <Property name="service">sec.scheduled#exeByHand</Property>
+      <Property name="confirmMessage">纭畾瑕佹墽琛屼箞锛�</Property>
+    </AjaxAction>
+  </View>
+</ViewConfig>
diff --git a/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepotPR.java b/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepotPR.java
new file mode 100644
index 0000000..be43a40
--- /dev/null
+++ b/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepotPR.java
@@ -0,0 +1,140 @@
+package com.ld.igds.sec.view;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.DataResolver;
+import com.bstek.dorado.annotation.Expose;
+import com.bstek.dorado.data.provider.Page;
+import com.ld.igds.models.SecSnapConf;
+import com.ld.igds.models.SecSnapDepot;
+import com.ld.igds.sec.service.SecSnapDepotService;
+import com.ld.igds.util.ContextUtil;
+
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: andy.jia
+ * @description: 浠撳唴鎶撴媿淇℃伅鑾峰彇绠$悊
+ * @version:
+ */
+@Component
+public class SecSnapDepotPR {
+
+    @Resource
+    private SecSnapDepotService snapDepotService;
+
+
+    /**
+     * secSnapDepotPR#pageSnapDepot
+     *
+     * @param param
+     * @throws Exception
+     */
+    @DataProvider
+    public void pageSnapDepot(Page<SecSnapDepot> page, Map<String, Object> param)
+            throws Exception {
+
+        if (null == param) param = new HashMap<>();
+        param.put("companyId", ContextUtil.getCompanyId());
+        param.put("deptId", ContextUtil.subDeptId(null));
+
+        snapDepotService.pageSnapDepot(page, param);
+
+        //娣诲姞4鏉℃祴璇曟暟鎹�
+        if (null == page.getEntities() || page.getEntities().isEmpty()) {
+            Collection<SecSnapDepot> list = new ArrayList<>();
+            list.add(new SecSnapDepot("TEST"));
+            list.add(new SecSnapDepot("TEST"));
+            list.add(new SecSnapDepot("TEST"));
+            list.add(new SecSnapDepot("TEST"));
+
+            page.setEntities(list);
+        }
+    }
+    
+    
+    
+    /**
+     * secSnapDepotPR#getConfActHour
+     * 
+     * 榛樿鑾峰彇绗竴鏉℃暟鎹殑閰嶇疆淇℃伅锛屽鏋滄病鏈夊氨杩斿洖涓�涓┖鐨勫璞�
+     * @param page
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @DataProvider
+    public SecSnapConf getConfActHour()throws Exception {
+    	List<SecSnapConf> list =   snapDepotService.listSnapConf(ContextUtil.getCompanyId(), ContextUtil.subDeptId(null));
+    	if(null == list || list.isEmpty()) return new SecSnapConf();
+    	return list.get(0);
+    }
+    
+    
+    /**
+     * secSnapDepotPR#listConf
+     * 
+     * 榛樿鑾峰彇绗竴鏉℃暟鎹殑閰嶇疆淇℃伅锛屽鏋滄病鏈夊氨杩斿洖涓�涓┖鐨勫璞�
+     * @param page
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @DataProvider
+    public List<SecSnapConf> listConf()throws Exception {
+    	return  snapDepotService.listSnapConf(ContextUtil.getCompanyId(), ContextUtil.subDeptId(null));
+    }
+    
+    
+    /**
+     * secSnapDepotPR#updateConf
+     * @param items
+     * @throws Exception
+     */
+    @DataResolver
+    public void updateConf(List<SecSnapConf> items)throws Exception {
+    	if(null ==items || items.isEmpty() ) return;
+    	for(SecSnapConf conf:items){
+    		if(null == conf.getId()){
+    			if(null == conf.getCompanyId()){
+    				conf.setCompanyId(ContextUtil.getCompanyId());
+    			}
+    			if(null == conf.getDeptId()){
+    				conf.setDeptId(ContextUtil.subDeptId(null));
+    			}
+    			snapDepotService.addConf(conf);
+    		}else{
+    			snapDepotService.updateConf(conf);
+    		}
+    	}
+    	
+    }
+    
+    
+    /**
+     * secSnapDepotPR#updateActHour
+     * @param items
+     * @throws Exception
+     */
+    @Expose
+    public void updateActHour(SecSnapConf conf)throws Exception {
+    
+    	if(null == conf.getCompanyId()){
+    		conf.setCompanyId(ContextUtil.getCompanyId());
+    	}
+    	if(null == conf.getDeptId()){
+    		conf.setDeptId(ContextUtil.subDeptId(null));
+    	}
+    	
+    	//鍚屾鏇存柊鎵�鏈夌殑鎵ц鏃堕棿涓�鑷�
+    	snapDepotService.updateActHour(conf);
+    	
+    }
+}
diff --git a/igds-security/src/main/java/com/ld/igds/timer/ScheduledSec.java b/igds-security/src/main/java/com/ld/igds/timer/ScheduledSec.java
new file mode 100644
index 0000000..36f12ad
--- /dev/null
+++ b/igds-security/src/main/java/com/ld/igds/timer/ScheduledSec.java
@@ -0,0 +1,174 @@
+package com.ld.igds.timer;
+
+import com.bstek.dorado.annotation.Expose;
+import com.ld.igds.camera.ApiCameraManager;
+import com.ld.igds.camera.CameraUtil;
+import com.ld.igds.camera.data.ApiCameraResp;
+import com.ld.igds.camera.data.ApiSnapReq;
+import com.ld.igds.data.ConfigData;
+import com.ld.igds.file.CoreFileService;
+import com.ld.igds.models.SecCamera;
+import com.ld.igds.models.SecSnapConf;
+import com.ld.igds.models.SnapSer;
+import com.ld.igds.sec.service.CoreSecCameraService;
+import com.ld.igds.sec.service.SecSnapDepotService;
+import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.DateUtil;
+import com.ld.igds.view.service.SnapSerService;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 瀹夐槻妯″潡鏍囧畾鏃跺櫒閰嶇疆
+ */
+@Slf4j
+@Component(ScheduledSec.BEAN_ID)
+public class ScheduledSec {
+
+	public static final String BEAN_ID = "sec.scheduled";
+
+	@Resource
+	private ConfigData configData;
+	@Resource
+	private SecSnapDepotService secSnapService;
+	@Resource
+	private CoreSecCameraService coreSecCameraService;
+	@Resource
+	private SnapSerService snapSerService;
+	@Resource
+	private CoreFileService fileService;
+	@Resource
+	private ApiCameraManager apiCameraManager;
+
+	/**
+	 * 浠�6-18鐐瑰紑濮嬫墽琛�
+	 */
+	@Scheduled(cron = "0 0 6,7,8,9,10,11,12,13,14,15,16,17,18 * * ? ")
+	public void scheduled30() {
+
+		Date exeDate = new Date();
+
+		// 鎵ц鎶撴媿鍒ゆ柇
+		doExeSnap(exeDate,false);
+	}
+	
+	
+	/**
+	 * sec.scheduled#exeByHand
+	 * 鎵嬪姩鎵ц
+	 */
+	@Expose
+	public void exeByHand(){
+		Date exeDate = new Date();
+
+		// 鎵ц鎶撴媿鍒ゆ柇
+		doExeSnap(exeDate,true);
+	}
+
+	/**
+	 * 瀹氭椂鎵ц鎶撴媿
+	 */
+	private void doExeSnap(Date date,boolean isByHand) {
+		try {
+			// 鑾峰彇鎵�鏈夐厤缃姄鎷嶆憚鍍忓ご
+			List<SecSnapConf> list = secSnapService.listSnapConf(
+					configData.getDefaultCompanyId(), null);
+
+			if (null == list || list.isEmpty()) {
+				return;
+			}
+			SecSnapConf exeConf = list.get(0);
+
+			// 鑾峰彇鎶撴媿鏃堕棿
+			int exeHour1 = exeConf.getActHour1();
+			int exeHour2 = exeConf.getActHour2();
+			int exeHour3 = exeConf.getActHour3();
+
+			if (exeHour1 == 0 && exeHour1 == 0 && exeHour1 == 0)
+				return;
+
+			// 鑾峰彇褰撳墠绯荤粺鏃堕棿
+			int curHour = DateUtil.getHour(date);
+			
+			if(isByHand){
+				exeHour1 = curHour;
+			}
+			
+			if(curHour != exeHour1 && curHour != exeHour2 && curHour !=exeHour3){
+				return;
+			}
+
+			log.info("===================鎵ц瀹氭椂浠撳唴瑙嗛鎶撴媿==================");
+
+			SecCamera secCamera;
+			Map<String, SnapSer> snapSerMap = new HashMap<>();
+			SnapSer snapSer;
+			for (SecSnapConf snapConf : list) {
+
+				secCamera = coreSecCameraService.getCameraById(
+						snapConf.getCompanyId(), snapConf.getCameraId());
+				
+				if (null == secCamera) continue;
+
+				snapSer = snapSerMap.get(snapConf.getDeptId());
+				if (null == snapSer) {
+					snapSer = snapSerService.getCacheByDeptId(snapConf.getDeptId());
+					snapSerMap.put(snapConf.getDeptId(), snapSer);
+				}
+
+				if (null == snapSer) {
+					log.error("------------鎶撴媿涓洪厤缃姄鎷嶅垎鏈�----------");
+					continue;
+				}
+
+				doExeSnapToData(secCamera, snapSer, snapConf);
+
+				Thread.sleep(500);
+			}
+		} catch (Exception e) {
+			log.error("----------鎶撴媿鍚庡彴鍑洪敊---------{}", e);
+		}
+	}
+
+	private void doExeSnapToData(SecCamera secCamera, SnapSer snapSer,SecSnapConf snapConf) {
+		ApiSnapReq req = new ApiSnapReq();
+		req.setCompanyId(secCamera.getCompanyId());
+		req.setDeptId(secCamera.getDeptId());
+		req.setSn(secCamera.getSn());
+		req.setSnapType(secCamera.getSnapType());
+		req.setPlayType(secCamera.getPlayType());
+		req.setSerSn(snapSer.getSn());
+		req.setCameraName(secCamera.getName());
+		req.setBizId(null);
+
+		req.setMediaAddr(CameraUtil.updateMediaAddr(secCamera.getMediaAddr(),
+				secCamera.getLoginId(), secCamera.getPwd(),
+				secCamera.getIpIn(), secCamera.getPortInC(),
+				secCamera.getChanNum()));
+
+		String filePath = fileService.getSnapFilePath(new Date());
+
+		req.setFilePath(filePath);
+
+		// 璋冩暣闄勪欢鍚嶇О锛岄伩鍏嶅嚭鐜颁腑鏂�
+		String fileName = snapConf.getDepotId() + "_" + ContextUtil.getTimeId(1000) + ".jpg";
+		req.setFileName(fileName);
+
+		// 鎵ц鎶撴媿
+		ApiCameraResp resp = apiCameraManager.getApiCameraService(secCamera.getPlayType()).snapImg(req);
+		resp.setFileName(fileName);
+
+		// 鎵ц璁板綍淇濆瓨
+		secSnapService.addData(snapConf, fileName, resp.getCode());
+	}
+}
diff --git a/igds-warn/src/main/java/com/ld/igds/warn/service/HSecureManagerService.java b/igds-warn/src/main/java/com/ld/igds/warn/service/HSecureManagerService.java
new file mode 100644
index 0000000..d923703
--- /dev/null
+++ b/igds-warn/src/main/java/com/ld/igds/warn/service/HSecureManagerService.java
@@ -0,0 +1,105 @@
+package com.ld.igds.warn.service;
+
+import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
+import com.bstek.dorado.data.provider.Page;
+import com.ld.igds.models.SecureManager;
+import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.DateUtil;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.hibernate.Session;
+import org.springframework.stereotype.Component;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author czt
+ * @date 2023/10/30
+ **/
+@Component
+public class HSecureManagerService extends HibernateDao {
+
+
+    public void listData(Page<SecureManager> page, Map<String, Object> param) throws Exception {
+        StringBuffer hql = new StringBuffer();
+        hql.append(" from " + SecureManager.class.getName() + " where companyId =:companyId and deptId =:deptId ");
+        Map<String, Object> args = new HashMap<>();
+        args.put("companyId", ContextUtil.getCompanyId());
+        args.put("deptId", ContextUtil.subDeptId(null));
+
+        String count = "select count(*) " + hql.toString();
+        hql.append(" order by updateTime desc");
+        this.pagingQuery(page, hql.toString(), count, args);
+
+    }
+
+    public void saveData(SecureManager data) {
+        data.setUpdateTime(new Date());
+        data.setDeptId(ContextUtil.subDeptId(null));
+        data.setCompanyId(ContextUtil.getCompanyId());
+        Session session = this.getSessionFactory().openSession();
+        try {
+            if (null == data.getFxdbm()) {
+                data.setFxdbm(DateFormatUtils.format(new Date(), "yyyyMMdd") + getIndex(data.getCompanyId()));
+
+                session.save(data);
+            } else {
+                session.update(data);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            session.flush();
+            session.close();
+        }
+    }
+
+    public String getIndex(String companyId) {
+        List<SecureManager> list = getDataByTime(companyId);
+        int index = 10000;
+        if (list != null && list.size() > 0) {
+            String id = list.get(0).getFxdbm().substring(8);
+            int temp = Integer.valueOf(id) + 1;
+            index += temp;
+        }else {
+            index ++;
+        }
+        return String.valueOf(index).substring(1);
+    }
+
+    private List<SecureManager> getDataByTime(String companyId) {
+        String hql = " from " + SecureManager.class.getName()
+                + " where companyId =:companyId ";
+
+        Map<String, Object> args = new HashMap<String, Object>();
+        args.put("companyId", companyId);
+
+        hql += " and updateTime >:startTime";
+        args.put("startTime", DateUtil.getCurZero(new Date()));
+
+
+        hql += " and updateTime <:endTime";
+        args.put("endTime", DateUtil.getNextZero(new Date()));
+
+
+        hql += " order by id desc";
+
+        return this.query(hql, args);
+    }
+
+    public void delData(SecureManager data) {
+        Session session = this.getSessionFactory().openSession();
+        try {
+            if (null != data.getFxdbm()) {
+                session.delete(data);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            session.flush();
+            session.close();
+        }
+    }
+
+}
diff --git a/igds-warn/src/main/java/com/ld/igds/warn/view/SecureManager.view.xml b/igds-warn/src/main/java/com/ld/igds/warn/view/SecureManager.view.xml
new file mode 100644
index 0000000..5c33d99
--- /dev/null
+++ b/igds-warn/src/main/java/com/ld/igds/warn/view/SecureManager.view.xml
@@ -0,0 +1,460 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model>
+    <DataType name="dtMain">
+      <Property name="creationType">com.ld.igds.models.SecureManager</Property>
+      <PropertyDef name="fxdbm">
+        <Property></Property>
+        <Property name="label">椋庨櫓鐐圭紪鐮�</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="companyId">
+        <Property></Property>
+        <Property name="label">缁勭粐缂栫爜</Property>
+      </PropertyDef>
+      <PropertyDef name="deptId">
+        <Property></Property>
+        <Property name="label">鎵�灞炲垎搴�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#loadParents&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="dd">
+        <Property></Property>
+        <Property name="label">鍦扮偣</Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="sbr">
+        <Property></Property>
+        <Property name="label">璇嗗埆浜�</Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="hjbw">
+        <Property></Property>
+        <Property name="label">鐜妭/閮ㄤ綅</Property>
+      </PropertyDef>
+      <PropertyDef name="fxxx">
+        <Property></Property>
+        <Property name="label">椋庨櫓淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="fxlx">
+        <Property name="label">椋庨櫓绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="keyProperty">key</Property>
+          <Property name="valueProperty">value</Property>
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="key">1</Property>
+                <Property name="value">1-鍩虹璁炬柦</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">2</Property>
+                <Property name="value">2-缃戠粶瀹夊叏</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">3</Property>
+                <Property name="value">3-娑堥槻瀹夊叏</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">4</Property>
+                <Property name="value">4-鐢ㄧ數瀹夊叏</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">5</Property>
+                <Property name="value">5-浣滀笟瀹夊叏</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">6</Property>
+                <Property name="value">6-鐢ㄨ嵂椋庨櫓</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">7</Property>
+                <Property name="value">7-绠$悊椋庨櫓</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">8</Property>
+                <Property name="value">8-鍏朵粬椋庨櫓</Property>
+              </Entity>
+            </Collection>
+          </Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="fxfj">
+        <Property name="label">椋庨櫓绛夌骇</Property>
+        <Property name="mapping">
+          <Property name="keyProperty">key</Property>
+          <Property name="valueProperty">value</Property>
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="key">1</Property>
+                <Property name="value">1-浣庨闄�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">2</Property>
+                <Property name="value">2-涓�鑸闄�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">3</Property>
+                <Property name="value">3-杈冨ぇ椋庨櫓</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">4</Property>
+                <Property name="value">4-閲嶅ぇ椋庨櫓</Property>
+              </Entity>
+            </Collection>
+          </Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="fxglcs">
+        <Property></Property>
+        <Property name="label">椋庨櫓绠℃帶鎺柦</Property>
+      </PropertyDef>
+      <PropertyDef name="yhxx">
+        <Property></Property>
+        <Property name="label">闅愭偅淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="yhpcxx">
+        <Property></Property>
+        <Property name="label">闅愭偅鎺掓煡淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="yhzgxx">
+        <Property></Property>
+        <Property name="label">闅愭偅鏁存敼淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="yhysxx">
+        <Property></Property>
+        <Property name="label">闅愭偅鏁存敼楠屾敹淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="sgjbxx">
+        <Property></Property>
+        <Property name="label">浜嬫晠鍩烘湰淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="zgsx">
+        <Property></Property>
+        <Property name="label">鏁存敼鏃堕檺</Property>
+      </PropertyDef>
+      <PropertyDef name="zrdw">
+        <Property></Property>
+        <Property name="label">璐d换鍗曚綅</Property>
+      </PropertyDef>
+      <PropertyDef name="zrr">
+        <Property></Property>
+        <Property name="label">璐d换浜�</Property>
+      </PropertyDef>
+      <PropertyDef name="zgysxx">
+        <Property></Property>
+        <Property name="label">鏁存敼楠屾敹淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="fxgzjgzrr">
+        <Property name="label">椋庨櫓璺熻釜鐩戠璐d换浜�</Property>
+      </PropertyDef>
+      <PropertyDef name="updateTime">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">鏈�鍚庢洿鏂版椂闂�</Property>
+      </PropertyDef>
+    </DataType>
+    <DataType name="dtParam">
+      <PropertyDef name="sbr">
+        <Property name="label">璇嗗埆浜�</Property>
+      </PropertyDef>
+      <PropertyDef name="dd">
+        <Property name="label">鍦扮偣</Property>
+      </PropertyDef>
+    </DataType>
+  </Model>
+  <View layout="padding:5;regionPadding:5">
+    <Property name="packages">font-awesome,css-common</Property>
+    <DataSet id="dsMain">
+      <Property name="dataType">[dtMain]</Property>
+      <Property name="dataProvider">secureManagerPR#pageList</Property>
+      <Property name="pageSize">15</Property>
+    </DataSet>
+    <DataSet id="dsParam">
+      <ClientEvent name="onReady">self.insert({})&#xD;
+</ClientEvent>
+      <Property name="dataType">[dtParam]</Property>
+    </DataSet>
+    <Container layout="regionPadding:10" layoutConstraint="top">
+      <Property name="exClassName">bg-color</Property>
+      <Property name="height">55</Property>
+      <Label layoutConstraint="left">
+        <Property name="text">鑿滃崟鏍忥細</Property>
+      </Label>
+      <Button layoutConstraint="left">
+        <ClientEvent name="onClick">view.get(&quot;#dsMain&quot;).insert();&#xD;
+view.get(&quot;#dialogMain&quot;).show();</ClientEvent>
+        <Property name="exClassName">btn-normal</Property>
+        <Property name="iconClass">fa fa-plus</Property>
+        <Property name="caption">鏂板</Property>
+      </Button>
+      <Button layoutConstraint="left">
+        <ClientEvent name="onClick">var dialog= view.get(&quot;#dsMain.data:#&quot;);&#xD;
+if(dialog){&#xD;
+	view.get(&quot;#dialogMain&quot;).show();&#xD;
+}else{&#xD;
+	$alert(&quot;璇烽�変腑闇�瑕佷慨鏀圭殑鏁版嵁&quot;)&#xD;
+}</ClientEvent>
+        <Property name="caption">缂栬緫</Property>
+        <Property name="exClassName">btn-warm</Property>
+        <Property name="iconClass">fa fa-pencil</Property>
+      </Button>
+      <Button>
+        <ClientEvent name="onClick">var cur = view.get(&quot;#dsMain.data:#&quot;);&#xD;
+if(!cur) return;&#xD;
+view.get(&quot;#ajaxDel&quot;).set(&quot;parameter&quot;,cur).execute(function(result){&#xD;
+	if(result){&#xD;
+		$alert(result);&#xD;
+		return;&#xD;
+	}else{&#xD;
+		cur.remove();&#xD;
+	}&#xD;
+});</ClientEvent>
+        <Property name="exClassName">btn-warn</Property>
+        <Property name="iconClass">fa fa-pencil</Property>
+        <Property name="caption">鍒犻櫎</Property>
+      </Button>
+    </Container>
+    <Container>
+      <AutoForm>
+        <Property name="dataSet">dsParam</Property>
+        <Property name="cols">*,*,*,*</Property>
+        <AutoFormElement>
+          <Property name="name">sbr</Property>
+          <Property name="property">sbr</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">dd</Property>
+          <Property name="property">dd</Property>
+          <Editor/>
+        </AutoFormElement>
+        <Container layout="regionPadding:10">
+          <Button layoutConstraint="left">
+            <ClientEvent name="onClick">var param = view.get(&quot;#dsParam.data:#&quot;);&#xD;
+view.get(&quot;#dsMain&quot;).set(&quot;parameter&quot;,param).flushAsync();</ClientEvent>
+            <Property name="caption">鏌ヨ</Property>
+            <Property name="exClassName">btn-normal</Property>
+            <Property name="iconClass">fa fa-search</Property>
+          </Button>
+          <Button layoutConstraint="left">
+            <ClientEvent name="onClick">view.get(&quot;#dsParam&quot;).insert({})</ClientEvent>
+            <Property name="caption">閲嶇疆</Property>
+            <Property name="iconClass">fa fa-refresh</Property>
+            <Property name="exClassName">btn-default</Property>
+          </Button>
+        </Container>
+      </AutoForm>
+      <DataGrid id="dgMain">
+        <ClientEvent name="onDataRowDoubleClick">view.get(&quot;#dialogMain&quot;).show();</ClientEvent>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="readOnly">true</Property>
+        <RowNumColumn/>
+        <DataColumn name="fxdbm">
+          <Property name="property">fxdbm</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="sbr">
+          <Property name="property">sbr</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="dd">
+          <Property name="property">dd</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="hjbw">
+          <Property name="property">hjbw</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="fxxx">
+          <Property name="property">fxxx</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="fxlx">
+          <Property name="property">fxlx</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="updateTime">
+          <Property name="property">updateTime</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+      </DataGrid>
+      <ToolBar layoutConstraint="bottom">
+        <Fill/>
+        <DataPilot>
+          <Property name="dataSet">dsMain</Property>
+          <Property name="itemCodes">pageSize,pages</Property>
+        </DataPilot>
+      </ToolBar>
+    </Container>
+    <Dialog id="dialogMain">
+      <Property name="caption">鍩烘湰淇℃伅</Property>
+      <Property name="width">80%</Property>
+      <Property name="closeable">false</Property>
+      <Buttons>
+        <Button>
+          <ClientEvent name="onClick">var data = view.get(&quot;#dsMain.data:#&quot;);&#xD;
+view.get(&quot;#uaAction&quot;).execute(function(result){&#xD;
+	if(result){&#xD;
+		$alert(result);&#xD;
+	}else{&#xD;
+		self.get(&quot;parent&quot;).hide();&#xD;
+	}&#xD;
+});</ClientEvent>
+          <Property name="caption">淇濆瓨</Property>
+          <Property name="iconClass">fa fa-check</Property>
+          <Property name="exClassName">btn-normal</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#dsMain.data:#&quot;).cancel();&#xD;
+self.get(&quot;parent&quot;).hide();</ClientEvent>
+          <Property name="caption">鍙栨秷</Property>
+          <Property name="iconClass">fa fa-times</Property>
+          <Property name="exClassName">btn-warn</Property>
+        </Button>
+      </Buttons>
+      <Children>
+        <AutoForm>
+          <Property name="dataSet">dsMain</Property>
+          <Property name="readOnly">false</Property>
+          <Property name="labelSeparator"> : </Property>
+          <Property name="labelAlign">right</Property>
+          <Property name="cols">*,*</Property>
+          <Property name="labelWidth">160</Property>
+          <AutoFormElement>
+            <Property name="name">fxdbm</Property>
+            <Property name="property">fxdbm</Property>
+            <Editor>
+              <TextEditor>
+                <Property name="blankText">--绯荤粺鑷姩鐢熸垚--</Property>
+              </TextEditor>
+            </Editor>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">deptId</Property>
+            <Property name="property">deptId</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">dd</Property>
+            <Property name="property">dd</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">sbr</Property>
+            <Property name="property">sbr</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">hjbw</Property>
+            <Property name="property">hjbw</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">fxxx</Property>
+            <Property name="property">fxxx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">fxlx</Property>
+            <Property name="property">fxlx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">fxfj</Property>
+            <Property name="property">fxfj</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">fxglcs</Property>
+            <Property name="property">fxglcs</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">yhxx</Property>
+            <Property name="property">yhxx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">yhpcxx</Property>
+            <Property name="property">yhpcxx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">yhzgxx</Property>
+            <Property name="property">yhzgxx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">yhysxx</Property>
+            <Property name="property">yhysxx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">sgjbxx</Property>
+            <Property name="property">sgjbxx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">zgsx</Property>
+            <Property name="property">zgsx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">zrdw</Property>
+            <Property name="property">zrdw</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">zrr</Property>
+            <Property name="property">zrr</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">zgysxx</Property>
+            <Property name="property">zgysxx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">fxgzjgzrr</Property>
+            <Property name="property">fxgzjgzrr</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">updateTime</Property>
+            <Property name="property">updateTime</Property>
+            <Editor/>
+          </AutoFormElement>
+        </AutoForm>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <UpdateAction id="uaAction">
+      <Property name="successMessage">鎵ц鎴愬姛!</Property>
+      <Property name="dataResolver">secureManagerPR#saveData</Property>
+      <UpdateItem>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="dataPath">[#current]</Property>
+      </UpdateItem>
+    </UpdateAction>
+    <AjaxAction id="ajaxDel">
+      <Property name="confirmMessage">纭畾瑕佸垹闄ゅ悧锛�</Property>
+      <Property name="service">secureManagerPR#delData</Property>
+    </AjaxAction>
+    <MonthDropDown id="monthDropDown1">
+      <ClientEvent name="onClose">var date = arg.selectedValue+1;&#xD;
+if(date&lt;10){&#xD;
+	arg.selectedValue=&quot;0&quot;+date&#xD;
+}else if(date>=10){&#xD;
+	arg.selectedValue=date&#xD;
+}&#xD;
+</ClientEvent>
+    </MonthDropDown>
+  </View>
+</ViewConfig>
diff --git a/igds-warn/src/main/java/com/ld/igds/warn/view/SecureManagerPR.java b/igds-warn/src/main/java/com/ld/igds/warn/view/SecureManagerPR.java
new file mode 100644
index 0000000..88889d4
--- /dev/null
+++ b/igds-warn/src/main/java/com/ld/igds/warn/view/SecureManagerPR.java
@@ -0,0 +1,53 @@
+package com.ld.igds.warn.view;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.DataResolver;
+import com.bstek.dorado.annotation.Expose;
+import com.bstek.dorado.data.provider.Page;
+import com.ld.igds.models.SecureManager;
+import com.ld.igds.warn.service.HSecureManagerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.util.Map;
+
+/**
+ * @Author: czt
+ **/
+@Component
+public class SecureManagerPR {
+    @Autowired
+    private HSecureManagerService secureManagerService;
+
+    /**
+     * secureManagerPR#pageList
+     *
+     * @param page
+     * @param param
+     * @throws Exception
+     */
+    @DataProvider
+    public void pageList(Page<SecureManager> page, Map<String, Object> param) throws Exception {
+        secureManagerService.listData(page, param);
+    }
+
+    /**
+     * secureManagerPR#saveData
+     *
+     * @param data
+     */
+    @DataResolver
+    public void saveData(SecureManager data) {
+        secureManagerService.saveData(data);
+    }
+
+    /**
+     * secureManagerPR#delData
+     *
+     * @param data
+     */
+    @Expose
+    public void delData(SecureManager data) {
+        secureManagerService.delData(data);
+    }
+
+}
diff --git a/igds-web/src/main/resources/static/css/bootstrap.min.css.map b/igds-web/src/main/resources/static/css/bootstrap.min.css.map
new file mode 100644
index 0000000..5f49bb3
--- /dev/null
+++ b/igds-web/src/main/resources/static/css/bootstrap.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["less/normalize.less","less/print.less","bootstrap.css","dist/css/bootstrap.css","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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DG,edkkDH,MAAA,aclkDG,edqkDH,MAAA,acrkDG,edwkDH,MAAA,IcxkDG,ed2kDH,MAAA,ac3kDG,ed8kDH,MAAA,ac9kDG,edilDH,MAAA,IcjlDG,edolDH,MAAA,ac/kDG,edklDH,MAAA,YcjmDG,edomDH,MAAA,KcpmDG,gBdumDH,KAAA,KcvmDG,gBd0mDH,KAAA,ac1mDG,gBd6mDH,KAAA,ac7mDG,edgnDH,KAAA,IchnDG,edmnDH,KAAA,acnnDG,edsnDH,KAAA,actnDG,edynDH,KAAA,IcznDG,ed4nDH,KAAA,ac5nDG,ed+nDH,KAAA,ac/nDG,edkoDH,KAAA,IcloDG,edqoDH,KAAA,achoDG,edmoDH,KAAA,YcpnDG,edunDH,KAAA,KcvnDG,kBd0nDH,YAAA,Kc1nDG,kBd6nDH,YAAA,ac7nDG,kBdgoDH,YAAA,achoDG,iBdmoDH,YAAA,IcnoDG,iBdsoDH,YAAA,actoDG,iBdyoDH,YAAA,aczoDG,iBd4oDH,YAAA,Ic5oDG,iBd+oDH,YAAA,ac/oDG,iBdkpDH,YAAA,aclpDG,iBdqpDH,YAAA,IcrpDG,iBdwpDH,YAAA,acxpDG,iBd2pDH,YAAA,Yc7rDG,iBACE,YAAA,EAOJ,yBACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Ud2rDD,MAAA,Kc3rDC,Wd8rDD,MAAA,Kc9rDC,WdisDD,MAAA,acjsDC,WdosDD,MAAA,acpsDC,UdusDD,MAAA,IcvsDC,Ud0sDD,MAAA,ac1sDC,Ud6sDD,MAAA,ac7sDC,UdgtDD,MAAA,IchtDC,UdmtDD,MAAA,acntDC,UdstDD,MAAA,acttDC,UdytDD,MAAA,IcztDC,Ud4tDD,MAAA,ac7sDC,UdgtDD,MAAA,YchtDC,gBdmtDD,MAAA,KcntDC,gBdstDD,MAAA,acttDC,gBdytDD,MAAA,acztDC,ed4tDD,MAAA,Ic5tDC,ed+tDD,MAAA,ac/tDC,edkuDD,MAAA,acluDC,edquDD,MAAA,IcruDC,edwuDD,MAAA,acxuDC,ed2uDD,MAAA,ac3uDC,ed8uDD,MAAA,Ic9uDC,edivDD,MAAA,ac5uDC,ed+uDD,MAAA,Yc9vDC,ediwDD,MAAA,KcjwDC,gBdowDD,KAAA,KcpwDC,gBduwDD,KAAA,acvwDC,gBd0wDD,KAAA,ac1wDC,ed6wDD,KAAA,Ic7wDC,edgxDD,KAAA,achxDC,edmxDD,KAAA,acnxDC,edsxDD,KAAA,IctxDC,edyxDD,KAAA,aczxDC,ed4xDD,KAAA,ac5xDC,ed+xDD,KAAA,Ic/xDC,edkyDD,KAAA,ac7xDC,edgyDD,KAAA,YcjxDC,edoxDD,KAAA,KcpxDC,kBduxDD,YAAA,KcvxDC,kBd0xDD,YAAA,ac1xDC,kBd6xDD,YAAA,ac7xDC,iBdgyDD,YAAA,IchyDC,iBdmyDD,YAAA,acnyDC,iBdsyDD,YAAA,actyDC,iBdyyDD,YAAA,IczyDC,iBd4yDD,YAAA,ac5yDC,iBd+yDD,YAAA,ac/yDC,iBdkzDD,YAAA,IclzDC,iBdqzDD,YAAA,acrzDC,iBdwzDD,YAAA,YY/yDD,iBE3CE,YAAA,GAQF,yBACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Udy1DD,MAAA,Kcz1DC,Wd41DD,MAAA,Kc51DC,Wd+1DD,MAAA,ac/1DC,Wdk2DD,MAAA,acl2DC,Udq2DD,MAAA,Icr2DC,Udw2DD,MAAA,acx2DC,Ud22DD,MAAA,ac32DC,Ud82DD,MAAA,Ic92DC,Udi3DD,MAAA,acj3DC,Udo3DD,MAAA,acp3DC,Udu3DD,MAAA,Icv3DC,Ud03DD,MAAA,ac32DC,Ud82DD,MAAA,Yc92DC,gBdi3DD,MAAA,Kcj3DC,gBdo3DD,MAAA,acp3DC,gBdu3DD,MAAA,acv3DC,ed03DD,MAAA,Ic13DC,ed63DD,MAAA,ac73DC,edg4DD,MAAA,ach4DC,edm4DD,MAAA,Icn4DC,eds4DD,MAAA,act4DC,edy4DD,MAAA,acz4DC,ed44DD,MAAA,Ic54DC,ed+4DD,MAAA,ac14DC,ed64DD,MAAA,Yc55DC,ed+5DD,MAAA,Kc/5DC,gBdk6DD,KAAA,Kcl6DC,gBdq6DD,KAAA,acr6DC,gBdw6DD,KAAA,acx6DC,ed26DD,KAAA,Ic36DC,ed86DD,KAAA,ac96DC,edi7DD,KAAA,acj7DC,edo7DD,KAAA,Icp7DC,edu7DD,KAAA,acv7DC,ed07DD,KAAA,ac17DC,ed67DD,KAAA,Ic77DC,edg8DD,KAAA,ac37DC,ed87DD,KAAA,Yc/6DC,edk7DD,KAAA,Kcl7DC,kBdq7DD,YAAA,Kcr7DC,kBdw7DD,YAAA,acx7DC,kBd27DD,YAAA,ac37DC,iBd87DD,YAAA,Ic97DC,iBdi8DD,YAAA,acj8DC,iBdo8DD,YAAA,acp8DC,iBdu8DD,YAAA,Icv8DC,iBd08DD,YAAA,ac18DC,iBd68DD,YAAA,ac78DC,iBdg9DD,YAAA,Ich9DC,iBdm9DD,YAAA,acn9DC,iBds9DD,YAAA,YY18DD,iBE9CE,YAAA,GAQF,0BACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Udu/DD,MAAA,Kcv/DC,Wd0/DD,MAAA,Kc1/DC,Wd6/DD,MAAA,ac7/DC,WdggED,MAAA,achgEC,UdmgED,MAAA,IcngEC,UdsgED,MAAA,actgEC,UdygED,MAAA,aczgEC,Ud4gED,MAAA,Ic5gEC,Ud+gED,MAAA,ac/gEC,UdkhED,MAAA,aclhEC,UdqhED,MAAA,IcrhEC,UdwhED,MAAA,aczgEC,Ud4gED,MAAA,Yc5gEC,gBd+gED,MAAA,Kc/gEC,gBdkhED,MAAA,aclhEC,gBdqhED,MAAA,acrhEC,edwhED,MAAA,IcxhEC,ed2hED,MAAA,ac3hEC,ed8hED,MAAA,ac9hEC,ediiED,MAAA,IcjiEC,edoiED,MAAA,acpiEC,eduiED,MAAA,acviEC,ed0iED,MAAA,Ic1iEC,ed6iED,MAAA,acxiEC,ed2iED,MAAA,Yc1jEC,ed6jED,MAAA,Kc7jEC,gBdgkED,KAAA,KchkEC,gBdmkED,KAAA,acnkEC,gBdskED,KAAA,actkEC,edykED,KAAA,IczkEC,ed4kED,KAAA,ac5kEC,ed+kED,KAAA,ac/kEC,edklED,KAAA,IcllEC,edqlED,KAAA,acrlEC,edwlED,KAAA,acxlEC,ed2lED,KAAA,Ic3lEC,ed8lED,KAAA,aczlEC,ed4lED,KAAA,Yc7kEC,e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pC,cAGA,ejB8DA,wBACQ,OAAA,YJ65FT,OAAA,kBmB56FG,mBAAA,KlBw7FM,WAAY,KkBt7FhB,QAAA,IASN,eC3DE,yBACA,eAAA,KpBo+FD,aoBj+FC,MAAA,KnB6+FA,iBAAkB,KmB3+FhB,aAAA,KpBq+FH,mBoBn+FO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBo+FH,mBoBj+FC,MAAA,KnB6+FA,iBAAkB,QAClB,aAAc,QmBz+FR,oBADJ,oBpBo+FH,mCoBj+FG,MAAA,KnB6+FF,iBAAkB,QAClB,aAAc,QmBz+FN,0BnB++FV,0BAHA,0BmB7+FM,0BnB++FN,0BAHA,0BDFC,yCoB3+FK,yCnB++FN,yCmB1+FE,MAAA,KnBk/FA,iBAAkB,QAClB,aAAc,QmB3+FZ,oBpBm+FH,oBoBn+FG,mCnBg/FF,iBAAkB,KmB5+FV,4BnBi/FV,4BAHA,4BDHC,6BCOD,6BAHA,6BkB99FA,sCClBM,sCnBi/FN,sCmB3+FI,iBAAA,KACA,aAAA,KDcJ,oBC9DE,MAAA,KACA,iBAAA,KpB6hGD,aoB1hGC,MAAA,KnBsiGA,iBAAkB,QmBpiGhB,aAAA,QpB8hGH,mBoB5hGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB6hGH,mBoB1hGC,MAAA,KnBsiGA,iBAAkB,QAClB,aAAc,QmBliGR,oBADJ,oBpB6hGH,mCoB1hGG,MAAA,KnBsiGF,iBAAkB,QAClB,aAAc,QmBliGN,0BnBwiGV,0BAHA,0BmBtiGM,0BnBwiGN,0BAHA,0BDFC,yCoBpiGK,yCnBwiGN,yCmBniGE,MAAA,KnB2iGA,iBAAkB,QAClB,aAAc,QmBpiGZ,oBpB4hGH,oBoB5hGG,mCnByiGF,iBAAkB,KmBriGV,4BnB0iGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBphGA,sCCrBM,sCnB0iGN,sCmBpiGI,iBAAA,QACA,aAAA,QDkBJ,oBClEE,MAAA,QACA,iBAAA,KpBslGD,aoBnlGC,MAAA,KnB+lGA,iBAAkB,QmB7lGhB,aAAA,QpBulGH,mBoBrlGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBslGH,mBoBnlGC,MAAA,KnB+lGA,iBAAkB,QAClB,aAAc,QmB3lGR,oBADJ,oBpBslGH,mCoBnlGG,MAAA,KnB+lGF,iBAAkB,QAClB,aAAc,QmB3lGN,0BnBimGV,0BAHA,0BmB/lGM,0BnBimGN,0BAHA,0BDFC,yCoB7lGK,yCnBimGN,yCmB5lGE,MAAA,KnBomGA,iBAAkB,QAClB,aAAc,QmB7lGZ,oBpBqlGH,oBoBrlGG,mCnBkmGF,iBAAkB,KmB9lGV,4BnBmmGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBzkGA,sCCzBM,sCnBmmGN,sCmB7lGI,iBAAA,QACA,aAAA,QDsBJ,oBCtEE,MAAA,QACA,iBAAA,KpB+oGD,UoB5oGC,MAAA,KnBwpGA,iBAAkB,QmBtpGhB,aAAA,QpBgpGH,gBoB9oGO,gBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB+oGH,gBoB5oGC,MAAA,KnBwpGA,iBAAkB,QAClB,aAAc,QmBppGR,iBADJ,iBpB+oGH,gCoB5oGG,MAAA,KnBwpGF,iBAAkB,QAClB,aAAc,QmBppGN,uBnB0pGV,uBAHA,uBmBxpGM,uBnB0pGN,uBAHA,uBDFC,sCoBtpGK,sCnB0pGN,sCmBrpGE,MAAA,KnB6pGA,iBAAkB,QAClB,aAAc,QmBtpGZ,iBpB8oGH,iBoB9oGG,gCnB2pGF,iBAAkB,KmBvpGV,yBnB4pGV,yBAHA,yBDHC,0BCOD,0BAHA,0BkB9nGA,mCC7BM,mCnB4pGN,mCmBtpGI,iBAAA,QACA,aAAA,QD0BJ,iBC1EE,MAAA,QACA,iBAAA,KpBwsGD,aoBrsGC,MAAA,KnBitGA,iBAAkB,QmB/sGhB,aAAA,QpBysGH,mBoBvsGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBwsGH,mBoBrsGC,MAAA,KnBitGA,iBAAkB,QAClB,aAAc,QmB7sGR,oBADJ,oBpBwsGH,mCoBrsGG,MAAA,KnBitGF,iBAAkB,QAClB,aAAc,QmB7sGN,0BnBmtGV,0BAHA,0BmBjtGM,0BnBmtGN,0BAHA,0BDFC,yCoB/sGK,yCnBmtGN,yCmB9sGE,MAAA,KnBstGA,iBAAkB,QAClB,aAAc,QmB/sGZ,oBpBusGH,oBoBvsGG,mCnBotGF,iBAAkB,KmBhtGV,4BnBqtGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBnrGA,sCCjCM,sCnBqtGN,sCmB/sGI,iBAAA,QACA,aAAA,QD8BJ,oBC9EE,MAAA,QACA,iBAAA,KpBiwGD,YoB9vGC,MAAA,KnB0wGA,iBAAkB,QmBxwGhB,aAAA,QpBkwGH,kBoBhwGO,kBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBiwGH,kBoB9vGC,MAAA,KnB0wGA,iBAAkB,QAClB,aAAc,QmBtwGR,mBADJ,mBpBiwGH,kCoB9vGG,MAAA,KnB0wGF,iBAAkB,QAClB,aAAc,QmBtwGN,yBnB4wGV,yBAHA,yBmB1wGM,yBnB4wGN,yBAHA,yBDFC,wCoBxwGK,wCnB4wGN,wCmBvwGE,MAAA,KnB+wGA,iBAAkB,QAClB,aAAc,QmBxwGZ,mBpBgwGH,mBoBhwGG,kCnB6wGF,iBAAkB,KmBzwGV,2BnB8wGV,2BAHA,2BDHC,4BCOD,4BAHA,4BkBxuGA,qCCrCM,qCnB8wGN,qCmBxwGI,iBAAA,QACA,aAAA,QDuCJ,mBACE,MAAA,QACA,iBAAA,KnBkuGD,UmB/tGC,YAAA,IlB2uGA,MAAO,QACP,cAAe,EAEjB,UG5wGE,iBemCE,iBflCM,oBJqwGT,6BmBhuGC,iBAAA,YlB4uGA,mBAAoB,KACZ,WAAY,KkBzuGlB,UAEF,iBAAA,gBnBguGD,gBmB9tGG,aAAA,YnBouGH,gBmBluGG,gBAIA,MAAA,QlB0uGF,gBAAiB,UACjB,iBAAkB,YDNnB,0BmBnuGK,0BAUN,mCATM,mClB8uGJ,MAAO,KmB7yGP,gBAAA,KAGA,mBADA,QpBsyGD,QAAA,KAAA,KmB5tGC,UAAW,KlBwuGX,YAAa,UmBpzGb,cAAA,IAGA,mBADA,QpB6yGD,QAAA,IAAA,KmB/tGC,UAAW,KlB2uGX,YAAa,ImB3zGb,cAAA,IAGA,mBADA,QpBozGD,QAAA,IAAA,ImB9tGC,UAAW,KACX,YAAA,IACA,cAAA,IAIF,WACE,QAAA,MnB8tGD,MAAA,KCYD,sBACE,WAAY,IqB53GZ,6BADF,4BtBq3GC,6BIhsGC,MAAA,KAEQ,MJosGT,QAAA,EsBx3GC,mBAAA,QAAA,KAAA,OACE,cAAA,QAAA,KAAA,OtB03GH,WAAA,QAAA,KAAA,OsBr3GC,StBw3GD,QAAA,EsBt3Ga,UtBy3Gb,QAAA,KsBx3Ga,atB23Gb,QAAA,MsB13Ga,etB63Gb,QAAA,UsBz3GC,kBACA,QAAA,gBlBwKA,YACQ,SAAA,SAAA,OAAA,EAOR,SAAA,OACQ,mCAAA,KAAA,8BAAA,KAGR,2BAAA,KACQ,4BAAA,KAAA,uBAAA,KJ8sGT,oBAAA,KuBx5GC,4BAA6B,OAAQ,WACrC,uBAAA,OAAA,WACA,oBAAA,OAAA,WAEA,OACA,QAAA,aACA,MAAA,EACA,OAAA,EACA,YAAA,IACA,eAAA,OvB05GD,WAAA,IAAA,OuBt5GC,WAAY,IAAI,QtBq6GhB,aAAc,IAAI,MAAM,YsBn6GxB,YAAA,IAAA,MAAA,YAKA,UADF,QvBu5GC,SAAA,SuBj5GC,uBACA,QAAA,EAEA,eACA,SAAA,SACA,IAAA,KACA,KAAA,EACA,QAAA,KACA,QAAA,KACA,MAAA,KACA,UAAA,MACA,QAAA,IAAA,EACA,OAAA,IAAA,EAAA,EACA,UAAA,KACA,WAAA,KACA,WAAA,KnBsBA,iBAAA,KACQ,wBAAA,YmBrBR,gBAAA,YtBk6GA,OsBl6GA,IAAA,MAAA,KvBq5GD,OAAA,IAAA,MAAA,gBuBh5GC,cAAA,IACE,mBAAA,EAAA,IAAA,KAAA,iBACA,WAAA,EAAA,IAAA,KAAA,iBAzBJ,0BCzBE,MAAA,EACA,KAAA,KAEA,wBxBu8GD,OAAA,IuBj7GC,OAAQ,IAAI,EAmCV,SAAA,OACA,iBAAA,QAEA,oBACA,QAAA,MACA,QAAA,IAAA,KACA,MAAA,KvBi5GH,YAAA,IuB34GC,YAAA,WtB25GA,MAAO,KsBz5GL,YAAA,OvB+4GH,0BuB74GG,0BAMF,MAAA,QtBu5GA,gBAAiB,KACjB,iBAAkB,QsBp5GhB,yBAEA,+BADA,+BvB04GH,MAAA,KuBh4GC,gBAAA,KtBg5GA,iBAAkB,QAClB,QAAS,EDZV,2BuB93GC,iCAAA,iCAEE,MAAA,KEzGF,iCF2GE,iCAEA,gBAAA,KvBg4GH,OAAA,YuB33GC,iBAAkB,YAGhB,iBAAA,KvB23GH,OAAA,0DuBt3GG,qBvBy3GH,QAAA,MuBh3GC,QACA,QAAA,EAQF,qBACE,MAAA,EACA,KAAA,KAIF,oBACE,MAAA,KACA,KAAA,EAEA,iBACA,QAAA,MACA,QAAA,IAAA,KvB22GD,UAAA,KuBv2GC,YAAa,WACb,MAAA,KACA,YAAA,OAEA,mBACA,SAAA,MACA,IAAA,EvBy2GD,MAAA,EuBr2GC,OAAQ,EACR,KAAA,EACA,QAAA,IAQF,2BtB+2GE,MAAO,EsB32GL,KAAA,KAEA,eACA,sCvB+1GH,QAAA,GuBt2GC,WAAY,EtBs3GZ,cAAe,IAAI,OsB32GjB,cAAA,IAAA,QAEA,uBvB+1GH,8CuB10GC,IAAK,KAXL,OAAA,KApEA,cAAA,IvB85GC,yBuB11GD,6BA1DA,MAAA,EACA,KAAA,KvBw5GD,kC0BviHG,MAAO,KzBujHP,KAAM,GyBnjHR,W1ByiHD,oB0B7iHC,SAAU,SzB6jHV,QAAS,ayBvjHP,eAAA,OAGA,yB1ByiHH,gBCgBC,SAAU,SACV,MAAO,KyBhjHT,gC1ByiHC,gCCYD,+BAFA,+ByBnjHA,uBANM,uBzB0jHN,sBAFA,sBAQE,QAAS,EyBrjHP,qB1B0iHH,2B0BriHD,2BACE,iC1BuiHD,YAAA,KCgBD,aACE,YAAa,KDZd,kB0B7iHD,wBAAA,0BzB8jHE,MAAO,KDZR,kB0BliHD,wBACE,0B1BoiHD,YAAA,I0B/hHC,yE1BkiHD,cAAA,E2BnlHC,4BACG,YAAA,EDsDL,mEzBgjHE,wBAAyB,E0B/lHzB,2BAAA,E3BolHD,6C0B/hHD,8CACE,uBAAA,E1BiiHD,0BAAA,E0B9hHC,sB1BiiHD,MAAA,KCgBD,8D0BlnHE,cAAA,E3BumHD,mE0B9hHD,oECjEE,wBAAA,EACG,2BAAA,EDqEL,oEzB6iHE,uBAAwB,EyB3iHxB,0BAAA,EAiBF,mCACE,iCACA,QAAA,EAEF,iCACE,cAAA,IACA,aAAA,IAKF,oCtB/CE,cAAA,KACQ,aAAA,KsBkDR,iCtBnDA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBsByDV,0CACE,mBAAA,K1B0gHD,WAAA,K0BtgHC,YACA,YAAA,EAGF,eACE,aAAA,IAAA,IAAA,E1BwgHD,oBAAA,ECgBD,uBACE,aAAc,EAAE,IAAI,IyB7gHlB,yBACA,+BACA,oC1BkgHH,QAAA,M0BzgHC,MAAO,KAcH,MAAA,K1B8/GL,UAAA,KCgBD,oCACE,MAAO,KyBvgHL,8BACA,oC1B4/GH,oC0Bv/GC,0CACE,WAAA,K1By/GH,YAAA,E2BlqHC,4DACC,cAAA,EAQA,sD3B+pHF,uBAAA,I0Bz/GC,wBAAA,IC/KA,2BAAA,EACC,0BAAA,EAQA,sD3BqqHF,uBAAA,E0B1/GC,wBAAyB,EACzB,2BAAA,I1B4/GD,0BAAA,ICgBD,uE0BzrHE,cAAA,E3B8qHD,4E0Bz/GD,6EC7LE,2BAAA,EACC,0BAAA,EDoMH,6EACE,uBAAA,EACA,wBAAA,EAEA,qB1Bu/GD,QAAA,M0B3/GC,MAAO,KzB2gHP,aAAc,MyBpgHZ,gBAAA,SAEA,0B1Bw/GH,gC0BjgHC,QAAS,WAYP,MAAA,K1Bw/GH,MAAA,G0Bp/GG,qC1Bu/GH,MAAA,KCgBD,+CACE,KAAM,KyBh/GF,gDAFA,6C1By+GL,2D0Bx+GK,wDEzOJ,SAAU,SACV,KAAA,cACA,eAAA,K5BotHD,a4BhtHC,SAAA,SACE,QAAA,MACA,gBAAA,S5BmtHH,0B4B3tHC,MAAO,KAeL,cAAA,EACA,aAAA,EAOA,2BACA,SAAA,S5B0sHH,QAAA,E4BxsHG,MAAA,KACE,MAAA,K5B0sHL,cAAA,ECgBD,iCACE,QAAS,EiBtrHT,8BACA,mCACA,sCACA,OAAA,KlB2qHD,QAAA,KAAA,KkBzqHC,UAAA,KjByrHA,YAAa,UACb,cAAe,IiBxrHb,oClB6qHH,yCkB1qHC,4CjB0rHA,OAAQ,KACR,YAAa,KDTd,8C4BltHD,mDAAA,sD3B6tHA,sCACA,2CiB5rHI,8CjBisHF,OAAQ,KiB7sHR,8BACA,mCACA,sCACA,OAAA,KlBksHD,QAAA,IAAA,KkBhsHC,UAAA,KjBgtHA,YAAa,IACb,cAAe,IiB/sHb,oClBosHH,yCkBjsHC,4CjBitHA,OAAQ,KACR,YAAa,KDTd,8C4BhuHD,mDAAA,sD3B2uHA,sCACA,2CiBntHI,8CjBwtHF,OAAQ,K2B5uHR,2B5BguHD,mB4BhuHC,iB3BivHA,QAAS,W2B5uHX,8D5BguHC,sD4BhuHD,oDAEE,cAAA,EAEA,mB5BkuHD,iB4B7tHC,MAAO,GACP,YAAA,OACA,eAAA,OAEA,mBACA,QAAA,IAAA,KACA,UAAA,KACA,YAAA,IACA,YAAA,EACA,MAAA,K5B+tHD,WAAA,O4B5tHC,iBAAA,KACE,OAAA,IAAA,MAAA,KACA,cAAA,I5B+tHH,4B4B5tHC,QAAA,IAAA,KACE,UAAA,KACA,cAAA,I5B+tHH,4B4BlvHC,QAAS,KAAK,K3BkwHd,UAAW,K2BxuHT,cAAA,IAKJ,wCAAA,qC3BwuHE,WAAY,EAEd,uCACA,+BACA,kC0Bh1HE,6CACG,8CC4GL,6D5BwtHC,wE4BvtHC,wBAAA,E5B0tHD,2BAAA,ECgBD,+BACE,aAAc,EAEhB,sCACA,8B2BnuHA,+D5BytHC,oDCWD,iC0Br1HE,4CACG,6CCiHH,uBAAA,E5B2tHD,0BAAA,E4BrtHC,8BAGA,YAAA,E5ButHD,iB4B3tHC,SAAU,SAUR,UAAA,E5BotHH,YAAA,O4BltHK,sB5BqtHL,SAAA,SCgBD,2BACE,YAAa,K2B3tHb,6BAAA,4B5B+sHD,4B4B5sHK,QAAA,EAGJ,kCAAA,wCAGI,aAAA,K5B+sHL,iC6B72HD,uCACE,QAAA,EACA,YAAA,K7Bg3HD,K6Bl3HC,aAAc,EAOZ,cAAA,EACA,WAAA,KARJ,QAWM,SAAA,SACA,QAAA,M7B+2HL,U6B72HK,SAAA,S5B63HJ,QAAS,M4B33HH,QAAA,KAAA,KAMJ,gB7B02HH,gB6Bz2HK,gBAAA,K7B42HL,iBAAA,KCgBD,mB4Bx3HQ,MAAA,KAGA,yBADA,yB7B62HP,MAAA,K6Br2HG,gBAAA,K5Bq3HF,OAAQ,YACR,iBAAkB,Y4Bl3Hd,aAzCN,mB7Bg5HC,mBwBn5HC,iBAAA,KACA,aAAA,QAEA,kBxBs5HD,OAAA,I6Bt5HC,OAAQ,IAAI,EA0DV,SAAA,O7B+1HH,iBAAA,Q6Br1HC,c7Bw1HD,UAAA,K6Bt1HG,UAEA,cAAA,IAAA,MAAA,KALJ,aASM,MAAA,KACA,cAAA,KAEA,e7Bu1HL,aAAA,I6Bt1HK,YAAA,WACE,OAAA,IAAA,MAAA,Y7Bw1HP,cAAA,IAAA,IAAA,EAAA,ECgBD,qBACE,aAAc,KAAK,KAAK,K4B/1HlB,sBAEA,4BADA,4BAEA,MAAA,K7Bo1HP,OAAA,Q6B/0HC,iBAAA,KAqDA,OAAA,IAAA,MAAA,KA8BA,oBAAA,YAnFA,wBAwDE,MAAA,K7B8xHH,cAAA,E6B5xHK,2BACA,MAAA,KA3DJ,6BAgEE,cAAA,IACA,WAAA,OAYJ,iDA0DE,IAAK,KAjED,KAAA,K7B6xHH,yB6B5tHD,2BA9DM,QAAA,W7B6xHL,MAAA,G6Bt2HD,6BAuFE,cAAA,GAvFF,6B5B23HA,aAAc,EACd,cAAe,IDZhB,kC6BzuHD,wCA3BA,wCATM,OAAA,IAAA,MAAA,K7BkxHH,yB6B9uHD,6B5B8vHE,cAAe,IAAI,MAAM,KACzB,cAAe,IAAI,IAAI,EAAE,EDZ1B,kC6Bj3HD,wC7Bk3HD,wC6Bh3HG,oBAAA,MAIE,c7Bk3HL,MAAA,K6B/2HK,gB7Bk3HL,cAAA,ICgBD,iBACE,YAAa,I4B13HP,uBAQR,6B7Bu2HC,6B6Br2HG,MAAA,K7Bw2HH,iBAAA,Q6Bt2HK,gBACA,MAAA,KAYN,mBACE,WAAA,I7B+1HD,YAAA,E6B51HG,e7B+1HH,MAAA,K6B71HK,kBACA,MAAA,KAPN,oBAYI,cAAA,IACA,WAAA,OAYJ,wCA0DE,IAAK,KAjED,KAAA,K7B81HH,yB6B7xHD,kBA9DM,QAAA,W7B81HL,MAAA,G6Br1HD,oBACA,cAAA,GAIE,oBACA,cAAA,EANJ,yB5B62HE,aAAc,EACd,cAAe,IDZhB,8B6B7yHD,oCA3BA,oCATM,OAAA,IAAA,MAAA,K7Bs1HH,yB6BlzHD,yB5Bk0HE,cAAe,IAAI,MAAM,KACzB,cAAe,IAAI,IAAI,EAAE,EDZ1B,8B6B30HD,oC7B40HD,oC6B10HG,oBAAA,MAGA,uB7B60HH,QAAA,K6Bl0HC,qBF3OA,QAAA,M3BkjID,yB8B3iIC,WAAY,KACZ,uBAAA,EACA,wBAAA,EAEA,Q9B6iID,SAAA,S8BriIC,WAAY,KA8nBZ,cAAe,KAhoBb,OAAA,IAAA,MAAA,Y9B4iIH,yB8B5hIC,QAgnBE,cAAe,K9Bi7GlB,yB8BphIC,eACA,MAAA,MAGA,iBACA,cAAA,KAAA,aAAA,KAEA,WAAA,Q9BqhID,2BAAA,M8BnhIC,WAAA,IAAA,MAAA,YACE,mBAAA,MAAA,EAAA,IAAA,EAAA,qB9BqhIH,WAAA,MAAA,EAAA,IAAA,EAAA,qB8B57GD,oBArlBI,WAAA,KAEA,yBAAA,iB9BqhID,MAAA,K8BnhIC,WAAA,EACE,mBAAA,KACA,WAAA,KAEA,0B9BqhIH,QAAA,gB8BlhIC,OAAA,eACE,eAAA,E9BohIH,SAAA,kBCkBD,oBACE,WAAY,QDZf,sC8BlhIK,mC9BihIH,oC8B5gIC,cAAe,E7B+hIf,aAAc,G6Bp+GlB,sCAnjBE,mC7B4hIA,WAAY,MDdX,4D8BtgID,sC9BugID,mCCkBG,WAAY,O6B9gId,kCANE,gC9BygIH,4B8B1gIG,0BAuiBF,aAAc,M7Bs/Gd,YAAa,MAEf,yBDZC,kC8B9gIK,gC9B6gIH,4B8B9gIG,0BAcF,aAAc,EAChB,YAAA,GAMF,mBA8gBE,QAAS,KAhhBP,aAAA,EAAA,EAAA,I9BqgIH,yB8BhgIC,mB7BkhIE,cAAe,G6B7gIjB,qBADA,kB9BmgID,SAAA,M8B5/HC,MAAO,EAggBP,KAAM,E7B+gHN,QAAS,KDdR,yB8BhgID,qB9BigID,kB8BhgIC,cAAA,GAGF,kBACE,IAAA,EACA,aAAA,EAAA,EAAA,I9BogID,qB8B7/HC,OAAQ,EACR,cAAA,EACA,aAAA,IAAA,EAAA,EAEA,cACA,MAAA,K9B+/HD,OAAA,K8B7/HC,QAAA,KAAA,K7B+gIA,UAAW,K6B7gIT,YAAA,KAIA,oBAbJ,oB9B2gIC,gBAAA,K8B1/HG,kB7B6gIF,QAAS,MDdR,yBACF,iC8Bn/HC,uCACA,YAAA,OAGA,eC9LA,SAAA,SACA,MAAA,MD+LA,QAAA,IAAA,KACA,WAAA,IACA,aAAA,KACA,cAAA,I9Bs/HD,iBAAA,Y8Bl/HC,iBAAA,KACE,OAAA,IAAA,MAAA,Y9Bo/HH,cAAA,I8B/+HG,qBACA,QAAA,EAEA,yB9Bk/HH,QAAA,M8BxgIC,MAAO,KAyBL,OAAA,I9Bk/HH,cAAA,I8BvjHD,mCAvbI,WAAA,I9Bm/HH,yB8Bz+HC,eACA,QAAA,MAGE,YACA,OAAA,MAAA,M9B4+HH,iB8B/8HC,YAAA,KA2YA,eAAgB,KAjaZ,YAAA,KAEA,yBACA,iCACA,SAAA,OACA,MAAA,KACA,MAAA,KAAA,WAAA,E9By+HH,iBAAA,Y8B9kHC,OAAQ,E7BimHR,mBAAoB,K6Bz/HhB,WAAA,KAGA,kDAqZN,sC9BqlHC,QAAA,IAAA,KAAA,IAAA,KCmBD,sC6B1/HQ,YAAA,KAmBR,4C9By9HD,4C8B1lHG,iBAAkB,M9B+lHnB,yB8B/lHD,YAtYI,MAAA,K9Bw+HH,OAAA,E8Bt+HK,eACA,MAAA,K9B0+HP,iB8B99HG,YAAa,KACf,eAAA,MAGA,aACA,QAAA,KAAA,K1B9NA,WAAA,IACQ,aAAA,M2B/DR,cAAA,IACA,YAAA,M/B+vID,WAAA,IAAA,MAAA,YiBzuHC,cAAe,IAAI,MAAM,YAwEzB,mBAAoB,MAAM,EAAE,IAAI,EAAE,qBAAyB,EAAE,IAAI,EAAE,qBAtI/D,WAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,qBAEA,yBjB2yHH,yBiBvqHC,QAAS,aA/HP,cAAA,EACA,eAAA,OjB0yHH,2BiB5qHC,QAAS,aAxHP,MAAA,KjBuyHH,eAAA,OiBnyHG,kCACA,QAAA,aAmHJ,0BhBssHE,QAAS,aACT,eAAgB,OgB/yHd,wCjBgyHH,6CiBxrHD,2CjB2rHC,MAAA,KiB/xHG,wCACA,MAAA,KAmGJ,4BhBktHE,cAAe,EgB9yHb,eAAA,OAGA,uBADA,oBjBgyHH,QAAA,aiBtsHC,WAAY,EhBytHZ,cAAe,EgB/yHX,eAAA,OAsFN,6BAAA,0BAjFI,aAAA,EAiFJ,4CjB+sHC,sCiB1xHG,SAAA,SjB6xHH,YAAA,E8BtgID,kDAmWE,IAAK,GAvWH,yBACE,yB9BihIL,cAAA,I8B//HD,oCAoVE,cAAe,GA1Vf,yBACA,aACA,MAAA,KACA,YAAA,E1BzPF,eAAA,EACQ,aAAA,EJswIP,YAAA,EACF,OAAA,E8BtgIG,mBAAoB,KACtB,WAAA,M9B0gID,8B8BtgIC,WAAY,EACZ,uBAAA,EHzUA,wBAAA,EAQA,mDACC,cAAA,E3B40IF,uBAAA,I8BlgIC,wBAAyB,IChVzB,2BAAA,EACA,0BAAA,EDkVA,YCnVA,WAAA,IACA,cAAA,IDqVA,mBCtVA,WAAA,KACA,cAAA,KD+VF,mBChWE,WAAA,KACA,cAAA,KDuWF,aAsSE,WAAY,KA1SV,cAAA,KAEA,yB9BkgID,aACF,MAAA,K8Br+HG,aAAc,KAhBhB,YAAA,MACA,yBE5WA,aF8WE,MAAA,eAFF,cAKI,MAAA,gB9B0/HH,aAAA,M8Bh/HD,4BACA,aAAA,GADF,gBAKI,iBAAA,Q9Bm/HH,aAAA,QCmBD,8B6BngIM,MAAA,KARN,oC9B6/HC,oC8B/+HG,MAAA,Q9Bk/HH,iBAAA,Y8B7+HK,6B9Bg/HL,MAAA,KCmBD,iC6B//HQ,MAAA,KAKF,uC9B4+HL,uCCmBC,MAAO,KACP,iBAAkB,Y6B5/HZ,sCAIF,4C9B0+HL,4CCmBC,MAAO,KACP,iBAAkB,Q6B1/HZ,wCAxCR,8C9BohIC,8C8Bt+HG,MAAA,K9By+HH,iBAAA,YCmBD,+B6Bz/HM,aAAA,KAGA,qCApDN,qC9B8hIC,iBAAA,KCmBD,yC6Bv/HI,iBAAA,KAOE,iCAAA,6B7Bq/HJ,aAAc,Q6Bj/HR,oCAiCN,0C9Bk8HD,0C8B9xHC,MAAO,KA7LC,iBAAA,QACA,yB7Bi/HR,sD6B/+HU,MAAA,KAKF,4D9B49HP,4DCmBC,MAAO,KACP,iBAAkB,Y6B5+HV,2DAIF,iE9B09HP,iECmBC,MAAO,KACP,iBAAkB,Q6B1+HV,6D9B69HX,mEADE,mE8B7jIC,MAAO,KA8GP,iBAAA,aAEE,6B9Bo9HL,MAAA,K8B/8HG,mC9Bk9HH,MAAA,KCmBD,0B6Bl+HM,MAAA,KAIA,gCAAA,gC7Bm+HJ,MAAO,K6Bz9HT,0CARQ,0CASN,mD9B08HD,mD8Bz8HC,MAAA,KAFF,gBAKI,iBAAA,K9B68HH,aAAA,QCmBD,8B6B79HM,MAAA,QARN,oC9Bu9HC,oC8Bz8HG,MAAA,K9B48HH,iBAAA,Y8Bv8HK,6B9B08HL,MAAA,QCmBD,iC6Bz9HQ,MAAA,QAKF,uC9Bs8HL,uCCmBC,MAAO,KACP,iBAAkB,Y6Bt9HZ,sCAIF,4C9Bo8HL,4CCmBC,MAAO,KACP,iBAAkB,Q6Bp9HZ,wCAxCR,8C9B8+HC,8C8B/7HG,MAAA,K9Bk8HH,iBAAA,YCmBD,+B6Bl9HM,aAAA,KAGA,qCArDN,qC9Bw/HC,iBAAA,KCmBD,yC6Bh9HI,iBAAA,KAME,iCAAA,6B7B+8HJ,aAAc,Q6B38HR,oCAuCN,0C9Bs5HD,0C8B93HC,MAAO,KAvDC,iBAAA,QAuDV,yBApDU,kE9By7HP,aAAA,Q8Bt7HO,0D9By7HP,iBAAA,QCmBD,sD6Bz8HU,MAAA,QAKF,4D9Bs7HP,4DCmBC,MAAO,KACP,iBAAkB,Y6Bt8HV,2DAIF,iE9Bo7HP,iECmBC,MAAO,KACP,iBAAkB,Q6Bp8HV,6D9Bu7HX,mEADE,mE8B7hIC,MAAO,KA+GP,iBAAA,aAEE,6B9Bm7HL,MAAA,Q8B96HG,mC9Bi7HH,MAAA,KCmBD,0B6Bj8HM,MAAA,QAIA,gCAAA,gC7Bk8HJ,MAAO,KgC1kJT,0CH0oBQ,0CGzoBN,mDjC2jJD,mDiC1jJC,MAAA,KAEA,YACA,QAAA,IAAA,KjC8jJD,cAAA,KiCnkJC,WAAY,KAQV,iBAAA,QjC8jJH,cAAA,IiC3jJK,eACA,QAAA,ajC+jJL,yBiC3kJC,QAAS,EAAE,IAkBT,MAAA,KjC4jJH,QAAA,SkC/kJC,oBACA,MAAA,KAEA,YlCklJD,QAAA,akCtlJC,aAAc,EAOZ,OAAA,KAAA,ElCklJH,cAAA,ICmBD,eiClmJM,QAAA,OAEA,iBACA,oBACA,SAAA,SACA,MAAA,KACA,QAAA,IAAA,KACA,YAAA,KACA,YAAA,WlCmlJL,MAAA,QkCjlJG,gBAAA,KjComJF,iBAAkB,KiCjmJZ,OAAA,IAAA,MAAA,KPVH,6B3B8lJJ,gCkChlJG,YAAA,EjCmmJF,uBAAwB,I0B1nJxB,0BAAA,I3B4mJD,4BkC3kJG,+BjC8lJF,wBAAyB,IACzB,2BAA4B,IiC3lJxB,uBAFA,uBAGA,0BAFA,0BlCilJL,QAAA,EkCzkJG,MAAA,QjC4lJF,iBAAkB,KAClB,aAAc,KAEhB,sBiC1lJM,4BAFA,4BjC6lJN,yBiC1lJM,+BAFA,+BAGA,QAAA,ElC8kJL,MAAA,KkCroJC,OAAQ,QjCwpJR,iBAAkB,QAClB,aAAc,QiCtlJV,wBAEA,8BADA,8BjCulJN,2BiCzlJM,iCjC0lJN,iCDZC,MAAA,KkClkJC,OAAQ,YjCqlJR,iBAAkB,KkChqJd,aAAA,KAEA,oBnCipJL,uBmC/oJG,QAAA,KAAA,KlCkqJF,UAAW,K0B7pJX,YAAA,U3B+oJD,gCmC9oJG,mClCiqJF,uBAAwB,I0B1qJxB,0BAAA,I3B4pJD,+BkC7kJD,kCjCgmJE,wBAAyB,IkChrJrB,2BAAA,IAEA,oBnCiqJL,uBmC/pJG,QAAA,IAAA,KlCkrJF,UAAW,K0B7qJX,YAAA,I3B+pJD,gCmC9pJG,mClCirJF,uBAAwB,I0B1rJxB,0BAAA,I3B4qJD,+BoC9qJD,kCACE,wBAAA,IACA,2BAAA,IAEA,OpCgrJD,aAAA,EoCprJC,OAAQ,KAAK,EAOX,WAAA,OpCgrJH,WAAA,KCmBD,UmChsJM,QAAA,OAEA,YACA,eACA,QAAA,apCirJL,QAAA,IAAA,KoC/rJC,iBAAkB,KnCktJlB,OAAQ,IAAI,MAAM,KmC/rJd,cAAA,KAnBN,kBpCosJC,kBCmBC,gBAAiB,KmC5rJb,iBAAA,KA3BN,eAAA,kBAkCM,MAAA,MAlCN,mBAAA,sBnCguJE,MAAO,KmCrrJH,mBAEA,yBADA,yBpCwqJL,sBqCrtJC,MAAO,KACP,OAAA,YACA,iBAAA,KAEA,OACA,QAAA,OACA,QAAA,KAAA,KAAA,KACA,UAAA,IACA,YAAA,IACA,YAAA,EACA,MAAA,KrCutJD,WAAA,OqCntJG,YAAA,OpCsuJF,eAAgB,SoCpuJZ,cAAA,MrCutJL,cqCrtJK,cAKJ,MAAA,KACE,gBAAA,KrCktJH,OAAA,QqC7sJG,aACA,QAAA,KAOJ,YCtCE,SAAA,StCkvJD,IAAA,KCmBD,eqChwJM,iBAAA,KALJ,2BD0CF,2BrC+sJC,iBAAA,QCmBD,eqCvwJM,iBAAA,QALJ,2BD8CF,2BrCktJC,iBAAA,QCmBD,eqC9wJM,iBAAA,QALJ,2BDkDF,2BrCqtJC,iBAAA,QCmBD,YqCrxJM,iBAAA,QALJ,wBDsDF,wBrCwtJC,iBAAA,QCmBD,eqC5xJM,iBAAA,QALJ,2BD0DF,2BrC2tJC,iBAAA,QCmBD,cqCnyJM,iBAAA,QCDJ,0BADF,0BAEE,iBAAA,QAEA,OACA,QAAA,aACA,UAAA,KACA,QAAA,IAAA,IACA,UAAA,KACA,YAAA,IACA,YAAA,EACA,MAAA,KACA,WAAA,OvCwxJD,YAAA,OuCrxJC,eAAA,OACE,iBAAA,KvCuxJH,cAAA,KuClxJG,aACA,QAAA,KAGF,YtCqyJA,SAAU,SsCnyJR,IAAA,KAMA,0BvC+wJH,eCmBC,IAAK,EsChyJD,QAAA,IAAA,IvCmxJL,cuCjxJK,cAKJ,MAAA,KtC+xJA,gBAAiB,KsC7xJf,OAAA,QvC+wJH,+BuC3wJC,4BACE,MAAA,QvC6wJH,iBAAA,KuCzwJG,wBvC4wJH,MAAA,MuCxwJG,+BvC2wJH,aAAA,IwCp0JC,uBACA,YAAA,IAEA,WACA,YAAA,KxCu0JD,eAAA,KwC50JC,cAAe,KvC+1Jf,MAAO,QuCt1JL,iBAAA,KAIA,eAbJ,cAcI,MAAA,QxCu0JH,awCr1JC,cAAe,KAmBb,UAAA,KxCq0JH,YAAA,ICmBD,cuCn1JI,iBAAA,QAEA,sBxCo0JH,4BwC91JC,cAAe,KA8Bb,aAAA,KxCm0JH,cAAA,IwChzJD,sBAfI,UAAA,KxCo0JD,oCwCj0JC,WvCo1JA,YAAa,KuCl1JX,eAAA,KxCo0JH,sBwC1zJD,4BvC60JE,cAAe,KuCj1Jb,aAAA,KC5CJ,ezC+2JD,cyC92JC,UAAA,MAGA,WACA,QAAA,MACA,QAAA,IACA,cAAA,KrCiLA,YAAA,WACK,iBAAA,KACG,OAAA,IAAA,MAAA,KJisJT,cAAA,IyC33JC,mBAAoB,OAAO,IAAI,YxC84J1B,cAAe,OAAO,IAAI,YwCj4J7B,WAAA,OAAA,IAAA,YAKF,iBzC82JD,eCmBC,aAAc,KACd,YAAa,KwC13JX,mBA1BJ,kBzCq4JC,kByC12JG,aAAA,QCzBJ,oBACE,QAAA,IACA,MAAA,KAEA,O1Cy4JD,QAAA,K0C74JC,cAAe,KAQb,OAAA,IAAA,MAAA,YAEA,cAAA,IAVJ,UAeI,WAAA,E1Cq4JH,MAAA,QCmBD,mByCl5JI,YAAA,IArBJ,SAyBI,U1Ck4JH,cAAA,ECmBD,WyC34JE,WAAA,IAFF,mBAAA,mBAMI,cAAA,KAEA,0BACA,0B1C43JH,SAAA,S0Cp3JC,IAAK,KCvDL,MAAA,MACA,MAAA,Q3C+6JD,e0Cz3JC,MAAO,QClDL,iBAAA,Q3C86JH,aAAA,Q2C36JG,kB3C86JH,iBAAA,Q2Ct7JC,2BACA,MAAA,Q3C07JD,Y0Ch4JC,MAAO,QCtDL,iBAAA,Q3Cy7JH,aAAA,Q2Ct7JG,e3Cy7JH,iBAAA,Q2Cj8JC,wBACA,MAAA,Q3Cq8JD,e0Cv4JC,MAAO,QC1DL,iBAAA,Q3Co8JH,aAAA,Q2Cj8JG,kB3Co8JH,iBAAA,Q2C58JC,2BACA,MAAA,Q3Cg9JD,c0C94JC,MAAO,QC9DL,iBAAA,Q3C+8JH,aAAA,Q2C58JG,iB3C+8JH,iBAAA,Q4Ch9JC,0BAAQ,MAAA,QACR,wCAAQ,K5Cs9JP,oBAAA,KAAA,E4Cl9JD,GACA,oBAAA,EAAA,GACA,mCAAQ,K5Cw9JP,oBAAA,KAAA,E4C19JD,GACA,oBAAA,EAAA,GACA,gCAAQ,K5Cw9JP,oBAAA,KAAA,E4Ch9JD,GACA,oBAAA,EAAA,GAGA,UACA,OAAA,KxCsCA,cAAA,KACQ,SAAA,OJ86JT,iBAAA,Q4Ch9JC,cAAe,IACf,mBAAA,MAAA,EAAA,IAAA,IAAA,eACA,WAAA,MAAA,EAAA,IAAA,IAAA,eAEA,cACA,MAAA,KACA,MAAA,EACA,OAAA,KACA,UAAA,KxCyBA,YAAA,KACQ,MAAA,KAyHR,WAAA,OACK,iBAAA,QACG,mBAAA,MAAA,EAAA,KAAA,EAAA,gBJk0JT,WAAA,MAAA,EAAA,KAAA,EAAA,gB4C78JC,mBAAoB,MAAM,IAAI,K3Cw+JzB,cAAe,MAAM,IAAI,K4Cv+J5B,WAAA,MAAA,IAAA,KDEF,sBCAE,gCDAF,iBAAA,yK5Ci9JD,iBAAA,oK4C18JC,iBAAiB,iK3Cs+JjB,wBAAyB,KAAK,KGlhK9B,gBAAA,KAAA,KJ4/JD,qBI1/JS,+BwCmDR,kBAAmB,qBAAqB,GAAG,OAAO,SErElD,aAAA,qBAAA,GAAA,OAAA,S9C+gKD,UAAA,qBAAA,GAAA,OAAA,S6C59JG,sBACA,iBAAA,Q7Cg+JH,wC4C38JC,iBAAkB,yKEzElB,iBAAA,oK9CuhKD,iBAAA,iK6Cp+JG,mBACA,iBAAA,Q7Cw+JH,qC4C/8JC,iBAAkB,yKE7ElB,iBAAA,oK9C+hKD,iBAAA,iK6C5+JG,sBACA,iBAAA,Q7Cg/JH,wC4Cn9JC,iBAAkB,yKEjFlB,iBAAA,oK9CuiKD,iBAAA,iK6Cp/JG,qBACA,iBAAA,Q7Cw/JH,uC+C/iKC,iBAAkB,yKAElB,iBAAA,oK/CgjKD,iBAAA,iK+C7iKG,O/CgjKH,WAAA,KC4BD,mB8CtkKE,WAAA,E/C+iKD,O+C3iKD,YACE,SAAA,O/C6iKD,KAAA,E+CziKC,Y/C4iKD,MAAA,Q+CxiKG,c/C2iKH,QAAA,MC4BD,4B8CjkKE,UAAA,KAGF,aAAA,mBAEE,aAAA,KAGF,YAAA,kB9CkkKE,cAAe,K8C3jKjB,YAHE,Y/CuiKD,a+CniKC,QAAA,W/CsiKD,eAAA,I+CliKC,c/CqiKD,eAAA,O+ChiKC,cACA,eAAA,OAMF,eACE,WAAA,EACA,cAAA,ICvDF,YAEE,aAAA,EACA,WAAA,KAQF,YACE,aAAA,EACA,cAAA,KAGA,iBACA,SAAA,SACA,QAAA,MhDglKD,QAAA,KAAA,KgD7kKC,cAAA,KrB3BA,iBAAA,KACC,OAAA,IAAA,MAAA,KqB6BD,6BACE,uBAAA,IrBvBF,wBAAA,I3BymKD,4BgDvkKC,cAAe,E/CmmKf,2BAA4B,I+CjmK5B,0BAAA,IAFF,kBAAA,uBAKI,MAAA,KAIF,2CAAA,gD/CmmKA,MAAO,K+C/lKL,wBAFA,wBhD4kKH,6BgD3kKG,6BAKF,MAAO,KACP,gBAAA,KACA,iBAAA,QAKA,uB/C+lKA,MAAO,KACP,WAAY,K+C5lKV,0BhDskKH,gCgDrkKG,gCALF,MAAA,K/CsmKA,OAAQ,YACR,iBAAkB,KDxBnB,mDgD/kKC,yDAAA,yD/C4mKA,MAAO,QDxBR,gDgDnkKC,sDAAA,sD/CgmKA,MAAO,K+C5lKL,wBAEA,8BADA,8BhDskKH,QAAA,EgD3kKC,MAAA,K/CumKA,iBAAkB,QAClB,aAAc,QAEhB,iDDpBC,wDCuBD,uDADA,uD+C5mKE,8DAYI,6D/C+lKN,uD+C3mKE,8D/C8mKF,6DAKE,MAAO,QDxBR,8CiD7qKG,oDADF,oDAEE,MAAA,QAEA,yBhD0sKF,MAAO,QgDxsKH,iBAAA,QAFF,0BAAA,+BAKI,MAAA,QAGF,mDAAA,wDhD2sKJ,MAAO,QDtBR,gCiDnrKO,gCAGF,qCAFE,qChD8sKN,MAAO,QACP,iBAAkB,QAEpB,iCgD1sKQ,uCAFA,uChD6sKR,sCDtBC,4CiDtrKO,4CArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,sBhDuuKF,MAAO,QgDruKH,iBAAA,QAFF,uBAAA,4BAKI,MAAA,QAGF,gDAAA,qDhDwuKJ,MAAO,QDtBR,6BiDhtKO,6BAGF,kCAFE,kChD2uKN,MAAO,QACP,iBAAkB,QAEpB,8BgDvuKQ,oCAFA,oChD0uKR,mCDtBC,yCiDntKO,yCArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,yBhDowKF,MAAO,QgDlwKH,iBAAA,QAFF,0BAAA,+BAKI,MAAA,QAGF,mDAAA,wDhDqwKJ,MAAO,QDtBR,gCiD7uKO,gCAGF,qCAFE,qChDwwKN,MAAO,QACP,iBAAkB,QAEpB,iCgDpwKQ,uCAFA,uChDuwKR,sCDtBC,4CiDhvKO,4CArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,wBhDiyKF,MAAO,QgD/xKH,iBAAA,QAFF,yBAAA,8BAKI,MAAA,QAGF,kDAAA,uDhDkyKJ,MAAO,QDtBR,+BiD1wKO,+BAGF,oCAFE,oChDqyKN,MAAO,QACP,iBAAkB,QAEpB,gCgDjyKQ,sCAFA,sChDoyKR,qCDtBC,2CiD7wKO,2CDkGN,MAAO,KACP,iBAAA,QACA,aAAA,QAEF,yBACE,WAAA,EACA,cAAA,IE1HF,sBACE,cAAA,EACA,YAAA,IAEA,O9C0DA,cAAA,KACQ,iBAAA,KJgvKT,OAAA,IAAA,MAAA,YkDtyKC,cAAe,IACf,mBAAA,EAAA,IAAA,IAAA,gBlDwyKD,WAAA,EAAA,IAAA,IAAA,gBkDlyKC,YACA,QAAA,KvBnBC,e3B0zKF,QAAA,KAAA,KkDzyKC,cAAe,IAAI,MAAM,YAMvB,uBAAA,IlDsyKH,wBAAA,IkDhyKC,0CACA,MAAA,QAEA,alDmyKD,WAAA,EkDvyKC,cAAe,EjDm0Kf,UAAW,KACX,MAAO,QDtBR,oBkD7xKC,sBjDqzKF,eiD3zKI,mBAKJ,qBAEE,MAAA,QvBvCA,cACC,QAAA,KAAA,K3By0KF,iBAAA,QkDxxKC,WAAY,IAAI,MAAM,KjDozKtB,2BAA4B,IiDjzK1B,0BAAA,IAHJ,mBAAA,mCAMM,cAAA,ElD2xKL,oCkDtxKG,oDjDkzKF,aAAc,IAAI,EiDhzKZ,cAAA,EvBtEL,4D3Bg2KF,4EkDpxKG,WAAA,EjDgzKF,uBAAwB,IiD9yKlB,wBAAA,IvBtEL,0D3B81KF,0EkD7yKC,cAAe,EvB1Df,2BAAA,IACC,0BAAA,IuB0FH,+EAEI,uBAAA,ElDixKH,wBAAA,EkD7wKC,wDlDgxKD,iBAAA,EC4BD,0BACE,iBAAkB,EiDryKpB,8BlD6wKC,ckD7wKD,gCjD0yKE,cAAe,EiD1yKjB,sCAQM,sBlD2wKL,wCC4BC,cAAe,K0Bx5Kf,aAAA,KuByGF,wDlDwxKC,0BC4BC,uBAAwB,IACxB,wBAAyB,IiDrzK3B,yFAoBQ,yFlD2wKP,2DkD5wKO,2DjDwyKN,uBAAwB,IACxB,wBAAyB,IAK3B,wGiDj0KA,wGjD+zKA,wGDtBC,wGCuBD,0EiDh0KA,0EjD8zKA,0EiDtyKU,0EjD8yKR,uBAAwB,IAK1B,uGiD30KA,uGjDy0KA,uGDtBC,uGCuBD,yEiD10KA,yEjDw0KA,yEiD5yKU,yEvB7HR,wBAAA,IuBiGF,sDlDwzKC,yBC4BC,2BAA4B,IAC5B,0BAA2B,IiD3yKrB,qFA1CR,qFAyCQ,wDlDsxKP,wDC4BC,2BAA4B,IAC5B,0BAA2B,IAG7B,oGDtBC,oGCwBD,oGiDj2KA,oGjD81KA,uEiDhzKU,uEjDkzKV,uEiDh2KA,uEjDs2KE,0BAA2B,IAG7B,mGDtBC,mGCwBD,mGiD32KA,mGjDw2KA,sEiDtzKU,sEjDwzKV,sEiD12KA,sEjDg3KE,2BAA4B,IiDrzK1B,0BlD8xKH,qCkDz1KD,0BAAA,qCA+DI,WAAA,IAAA,MAAA,KA/DJ,kDAAA,kDAmEI,WAAA,EAnEJ,uBAAA,yCjD83KE,OAAQ,EiDpzKA,+CjDwzKV,+CiDl4KA,+CjDo4KA,+CAEA,+CANA,+CDjBC,iECoBD,iEiDn4KA,iEjDq4KA,iEAEA,iEANA,iEAWE,YAAa,EiD9zKL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1MG,QAAS,oB/Dm2MV,c+Dr2MC,c/Ds2MH,QAAA,sB+Dj2MG,yB/Dq2MD,kBACF,QAAA,iB+Dj2MG,yB/Dq2MD,mBACF,QAAA,kBgEn6MC,yBhEu6MC,yBgEt6MD,QAAA,wBACA,+CAAU,YhE26MT,QAAA,gBC4BD,iB+Dr8MU,QAAA,gBhE86MX,c+Dx2MG,QAAS,oB/D42MV,c+D92MC,c/D+2MH,QAAA,sB+D12MG,+C/D82MD,kBACF,QAAA,iB+D12MG,+C/D82MD,mBACF,QAAA,kBgEj8MC,+ChEq8MC,yBgEp8MD,QAAA,wBACA,gDAAU,YhEy8MT,QAAA,gBC4BD,iB+Dn+MU,QAAA,gBhE48MX,c+Dj3MG,QAAS,oB/Dq3MV,c+Dv3MC,c/Dw3MH,QAAA,sB+Dn3MG,gD/Du3MD,kBACF,QAAA,iB+Dn3MG,gD/Du3MD,mBACF,QAAA,kBgE/9MC,gDhEm+MC,yBgEl+MD,QAAA,wBACA,0BAAU,YhEu+MT,QAAA,gBC4BD,iB+DjgNU,QAAA,gBhE0+MX,c+D13MG,QAAS,oB/D83MV,c+Dh4MC,c/Di4MH,QAAA,sB+D53MG,0B/Dg4MD,kBACF,QAAA,iB+D53MG,0B/Dg4MD,mBACF,QAAA,kBgEr/MC,0BhEy/MC,yBACF,QAAA,wBgE1/MC,yBhE8/MC,WACF,QAAA,gBgE//MC,+ChEmgNC,WACF,QAAA,gBgEpgNC,gDhEwgNC,WACF,QAAA,gBAGA,0B+Dn3MC,WA4BE,QAAS,gBC5LX,eAAU,QAAA,eACV,aAAU,ehE4hNT,QAAA,gBC4BD,oB+DtjNU,QAAA,gBhE+hNX,iB+Dj4MG,QAAS,oBAMX,iB/D83MD,iB+Dz2MG,QAAS,sB/D82MZ,qB+Dl4MC,QAAS,e/Dq4MV,a+D/3MC,qBAcE,QAAS,iB/Ds3MZ,sB+Dn4MC,QAAS,e/Ds4MV,a+Dh4MC,sBAOE,QAAS,kB/D83MZ,4B+D/3MC,QAAS,eCpLT,ahEujNC,4BACF,QAAA,wBC6BD,aACE,cACE,QAAS"}
\ No newline at end of file
diff --git a/igds-web/src/main/resources/static/images/img-fail.jpg b/igds-web/src/main/resources/static/images/img-fail.jpg
new file mode 100644
index 0000000..b642daf
--- /dev/null
+++ b/igds-web/src/main/resources/static/images/img-fail.jpg
Binary files differ
diff --git a/igds-web/src/main/resources/static/img/areation/5000/pfc_a.png b/igds-web/src/main/resources/static/img/areation/5000/pfc_a.png
new file mode 100644
index 0000000..fddcfa0
--- /dev/null
+++ b/igds-web/src/main/resources/static/img/areation/5000/pfc_a.png
Binary files differ
diff --git a/igds-web/src/main/resources/static/img/areation/5000/pfc_b.png b/igds-web/src/main/resources/static/img/areation/5000/pfc_b.png
new file mode 100644
index 0000000..e6f62ac
--- /dev/null
+++ b/igds-web/src/main/resources/static/img/areation/5000/pfc_b.png
Binary files differ
diff --git a/igds-web/src/main/resources/static/img/gas/5326/5326_001.png b/igds-web/src/main/resources/static/img/gas/5326/5326_001.png
new file mode 100644
index 0000000..6f8c7aa
--- /dev/null
+++ b/igds-web/src/main/resources/static/img/gas/5326/5326_001.png
Binary files differ
diff --git a/igds-web/src/main/resources/templates/test/PrintIn5329.html b/igds-web/src/main/resources/templates/test/PrintIn5329.html
new file mode 100644
index 0000000..e557695
--- /dev/null
+++ b/igds-web/src/main/resources/templates/test/PrintIn5329.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang='zh-cn'><head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'><title>鍏ュ簱杩囩鍗�</title><style>body {text-align: center;padding: 10px}  .tit {margin: 10px;font-size: 24px;font-family: '瀹嬩綋';padding-top: 15px}  .div-tit {padding-top: 10px}  table {width: 100%;border-right: 1px solid;border-bottom: 1px solid;font-size: 14px}  table td {border-left: 1px solid;border-top: 1px solid;height: 38px}  .sp1 {width: 50%;float: left;padding-bottom: 10px}  .sp2 {width: 50%;float: left;text-align: center}</style></head><body><h1 class='tit'>浣涘北甯傜鍩庡尯绮浜т笟鍥叆搴撶鐮佸崟</h1><div id=\"print_main\" class='div-tit'><span class='sp1'>瀹屾垚鏃堕棿锛�<a>completeTime</a></span><span class='sp1'>鍗曞彿锛歴erId</span></div><table cellspacing='0' cellpadding='0'><tr><td width='12.5%'>鍙戣揣鍗曚綅</td><td colspan='3' width='37.5%'>customerName</td><td width='12.5%'>鏀惰揣鍗曚綅</td><td colspan='3' `width`='37.5%'>deptName</td></tr><tr><td width='12.5%'>鎵胯繍浜�</td><td width='12.5%'>driverName</td><td width='12.5%'>绮鍝佺</td><td width='12.5%'>foodVariety</td><td width='12.5%'>瑁呭嵏浠撳簱</td><td width='12.5%'>depotName</td><td width='12.5%'>绮浜у湴</td><td width='12.5%'>foodLocation</td></tr><tr><td>鎵胯繍杞︾墝</td><td>plateNum</td><td>姣涢噸(KG)</td><td>fullWeight</td><td>鐨噸(KG)</td><td>emptyWeight</td><td>鍑�閲�(KG)</td><td>netWeight</td></tr><tr><td>璐ㄦ缁撴灉</td><td>checkStatus</td><td>鍖呰鎵i噸(KG)</td><td>dePackage</td><td>鍏ュ簱閲嶉噺(KG)</td><td>recordWeight</td><td>缁撶畻閲嶉噺(KG)</td><td>settleWeight</td></tr><tr><td>鐧昏鏃堕棿</td><td colspan="3">registerTime</td><td>瀹屾垚鏃堕棿</td><td colspan="3">completeTime</td></tr><tr><td>澶囨敞</td><td colspan='7'>remark</td></tr></table><div class='div-tit'><span class='sp2'>鍙哥鍛橈細</span></span><span class='sp2'>鎵胯繍浜猴細</span></div></br><div style="padding-top: 10px"><span></span></div><div style="text-align: left;font-size: 12px"><span>娉細</span></div><div style="text-align: left;font-size: 12px"><span>1.鍑�閲�=姣涢噸-鐨噸锛涜川妫�澧炴墸閲嶆牴鎹川妫�璇︾粏濉啓锛�</span></div><div style="text-align: left;font-size: 12px"><span>2.鍏ュ簱閲嶉噺=鍑�閲�-鎵i噸锛涚粨绠楅噸閲�=鍏ュ簱閲嶉噺+璐ㄦ澧為噸锛�</span></div><div style="text-align: left;font-size: 12px"><span>3.鐧借仈锛堝瓨鏍癸級锛岀孩鑱旓紙璁拌处锛夛紝榛勮仈锛堝鎴蜂繚鐣欙級</span></div></body></html>
diff --git a/igds-web/src/main/resources/templates/test/PrintOut5329.html b/igds-web/src/main/resources/templates/test/PrintOut5329.html
new file mode 100644
index 0000000..1fe868a
--- /dev/null
+++ b/igds-web/src/main/resources/templates/test/PrintOut5329.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang='zh-cn'>
+<head>
+    <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>
+    <title>鍑哄簱绉伴噸鍗�</title>
+    <style>body {
+        text-align: center;
+        padding: 10px
+    }
+
+    .tit {
+        margin: 10px;
+        font-size: 24px;
+        font-family: '瀹嬩綋';
+        padding-top: 15px
+    }
+
+    .div-tit {
+        padding-top: 10px
+    }
+
+    .sp1 {
+        width: 50%;
+        float: left;
+        padding-bottom: 10px
+    }
+
+    .sp2 {
+        width: 25%;
+        float: left;
+        text-align: center
+    }
+
+    table {
+        width: 100%;
+        border-right: 1px solid;
+        border-bottom: 1px solid;
+        font-size: 14px
+    }
+
+    table td {
+        border-left: 1px solid;
+        border-top: 1px solid;
+        height: 38px
+    }</style>
+</head>
+<body><h1 class='tit'>billTitle</h1>
+<div class='div-tit'><span class='sp1'>鐧昏鏃堕棿锛歳egisterTime</span><span class='sp1'>鍑哄簱鍗曞彿锛歴erId</span></div>
+<table cellspacing='0' cellpadding='0'>
+    <tr>
+        <td width='12.5%'>鍙戣揣鍗曚綅</td>
+        <td colspan='3' width='37.5%'>deptName</td>
+        <td width='12.5%'>鏀惰揣鍗曚綅</td>
+        <td colspan='3' width='37.5%'>customerName</td>
+    </tr>
+    <tr>
+        <td width='12.5%'>鎵胯繍浜�</td>
+        <td width='12.5%'>driverName</td>
+        <td width='12.5%'>绮鍝佺</td>
+        <td width='12.5%'>foodVariety</td>
+        <td width='12.5%'>鍑哄簱浠撳簱</td>
+        <td width='12.5%'>depotName</td>
+        <td width='12.5%'>绮浜у湴</td>
+        <td width='12.5%'>foodLocation</td>
+    </tr>
+    <tr>
+        <td>鎵胯繍杞︾墝</td>
+        <td>plateNum</td>
+        <td>姣涢噸(KG)</td>
+        <td>fullWeight</td>
+        <td>鐨噸(KG)</td>
+        <td>emptyWeight</td>
+        <td>鍑�閲�(KG)</td>
+        <td>netWeight</td>
+    </tr>
+    <tr>
+        <td>鍏朵粬鎵i噸(KG)</td>
+        <td>deOther</td>
+        <td>鍊间粨鎵i噸(KG)</td>
+        <td>deHandle</td>
+        <td>缁撶畻閲嶉噺(KG)</td>
+        <td>settleWeight</td>
+        <td colspan="2"></td>
+    </tr>
+    <tr>
+        <td>澶囨敞</td>
+        <td colspan='7'>remark</td>
+    </tr>
+</table>
+<div class='div-tit'><span class='sp2'>鍙哥鍛橈細</span><span class='sp2'>鐩戠鍛橈細</span><span
+        class='sp2'>淇濈鍛橈細handleUser</span><span class='sp2'>鎵胯繍浜猴細driverName</span></div>
+<br></body>
+<div style="padding-top: 10px"><span></span></div>
+<div style="text-align: left;font-size: 12px"><span>娉細</span></div>
+<div style="text-align: left;font-size: 12px"><span>1.鍑�閲�=姣涢噸-鐨噸锛�</span></div>
+<div style="text-align: left;font-size: 12px"><span>2.鍑哄簱閲嶉噺=鍑�閲�-鎬绘墸閲嶏紱缁撶畻閲嶉噺=鍑�閲�-鎬绘墸閲嶏紱</span></div>
+<div style="text-align: left;font-size: 12px
+"><span>3.鐧借仈锛堝瓨鏍癸級锛岀孩鑱旓紙璁拌处锛夛紝榛勮仈锛堝鎴蜂繚鐣欙級</span></div>
+</html>

--
Gitblit v1.9.3