trigger Repair on Repair__c (before insert, after insert, before update, after update, after delete, before delete) {
|
if(Test.isRunningTest()||UserInfo.getUserId()!=System.Label.ByPassTrigger){
|
RepairHandler handler = new RepairHandler();
|
handler.run();
|
System.debug( '-----: trigger start');
|
test();
|
if ( Trigger.isBefore && Trigger.isUpdate) {
|
RepairTrigger.CheckUpdate(Trigger.old, Trigger.newMap);
|
}
|
|
// ----------------------------------------------------------------------
|
// wangweipeng 20210727 start
|
// 新增修理时,如果直返收货地址的信息都为空,那么就根据医院的 OCSM管理省(文本) 字段来匹配地址表里 省和市字段
|
// 如果能匹配到那么默认是这条新增的修理收货地址
|
// ----------------------------------------------------------------------
|
if ( Trigger.isBefore && Trigger.isInsert) {
|
RepairBeforeInsertHandler ribt = new RepairBeforeInsertHandler();
|
ribt.beforeInsertValue(Trigger.new,Trigger.old);
|
}
|
//wangweipeng 20210727 end
|
|
if ((Trigger.isAfter && Trigger.isInsert) || (Trigger.isAfter && Trigger.isUpdate) || (Trigger.isAfter && Trigger.isDelete)) {
|
// if(!(System.isFuture()||System.isBatch())){// Add By Lijun 20220303 to avoid mutiple execute
|
NFM103Controller.NFM103Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
|
NFM603Controller.NFM603Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
|
RepairTrigger.UpdateAssert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
|
// }
|
}
|
if( Trigger.isBefore && Trigger.isUpdate){
|
|
}
|
// ----------------------------------------------------------------------
|
// ここより、修理のサービスコントラクト項目を自動的に更新するロジック
|
// ----------------------------------------------------------------------
|
if ( Trigger.isBefore && (Trigger.isInsert || Trigger.isUpdate)) {
|
//先款后修-修理增加先款标识 thh 20220322 start
|
RepairTrigger.AdvancePaymentFlagUpsert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
|
//先款后修-修理增加先款标识 thh 20220322 end
|
|
// 納入機器IDを一意に格納する Setです。
|
Set<ID> assetIds = new Set<Id>();
|
|
// 納入機器の一意のIDを得る
|
for ( Repair__c repair : Trigger.New) {
|
if (String.isBlank(repair.Delivered_Product__c) == false) assetIds.add( repair.Delivered_Product__c);
|
}
|
|
// 有効なサービス契約の Mapを得る
|
// arg1は納入機器のID, arg2は納入機器のIDのサービス契約一覧
|
// 区分虚拟维修合同和正常维修合同
|
// 正常维修合同保有设备集合
|
Map<Id, List<Maintenance_Contract_Asset__c>> effectiveContracts = new Map<Id, List<Maintenance_Contract_Asset__c>>();
|
// 虚拟维修合同保有设备集合
|
Map<Id, List<Maintenance_Contract_Asset__c>> effectiveContractsVM = new Map<Id, List<Maintenance_Contract_Asset__c>>();
|
List<Maintenance_Contract_Asset__c> contracts = OncallFinalStatusManager.selectMaintenance_Contract_Asset_List(assetIds);
|
for (Maintenance_Contract_Asset__c local : contracts) {
|
if (local.Maintenance_Contract__r.RecordType.DeveloperName == 'VM_Contract') {
|
List<Maintenance_Contract_Asset__c> middleTableVMList = effectiveContractsVM.get(local.Asset__c);
|
if (middleTableVMList == null) {
|
middleTableVMList = new List<Maintenance_Contract_Asset__c>();
|
effectiveContractsVM.put(local.Asset__c, middleTableVMList);
|
}
|
middleTableVMList.add(local);
|
} else {
|
List<Maintenance_Contract_Asset__c> middleTableList = effectiveContracts.get(local.Asset__c);
|
if (middleTableList == null) {
|
middleTableList = new List<Maintenance_Contract_Asset__c>();
|
effectiveContracts.put(local.Asset__c, middleTableList);
|
}
|
middleTableList.add(local);
|
}
|
}
|
System.debug( '-----: 维修合同开始');
|
// 本題のロジック
|
for ( Repair__c repair : Trigger.New) {
|
//add wangweipeng 2021/12/09 start
|
boolean defaultFlag = true;
|
//add wangweipeng 2021/12/09 end
|
// 草案中修理だけ更新
|
// GZW 特殊处理 跳过维修中心自动赋值,以手选为准 start
|
// 判断条件追加 && repair.Exc_work_location__c == false
|
if(repair.Exc_work_location__c){
|
defaultFlag = false;
|
}
|
// GZW 特殊处理 跳过维修中心自动赋值,以手选为准 start
|
|
if ((repair.Status__c == '草案中' || String.isBlank(repair.Status__c)) == false) {
|
// if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null) {
|
if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false) {
|
|
repair = RepairTrigger.updateWorkLocationSelect(repair, null);
|
defaultFlag = false;
|
}
|
continue;
|
}
|
System.debug( '-----:自动带出维修合同');
|
// 修理の「故障発生日」が、サービス契約の「契約開始日」〜「契約終了日」に含まれるか?
|
List<Maintenance_Contract_Asset__c> middleTableList = effectiveContracts.get(repair.Delivered_Product__c);
|
|
Boolean needsetnull = true;
|
System.debug( '-----:自动带出维修合同11111' + middleTableList);
|
// if (middleTableList == null) {
|
if (middleTableList == null && repair.Exc_work_location__c == false) {
|
if ((repair.NewProductGuarante_Txt__c == '2: 多年保修'
|
|| repair.NewProductGuarante_Txt__c == '2: 服务多年保修'
|
|| repair.NewProductGuarante_Txt__c == '8: 市场多年保修')
|
&& (repair.Sales_Branch__c != repair.Finance_of_Branch__c) && repair.SAP_Transfer_time__c == null) {
|
repair = RepairTrigger.updateWorkLocationSelect(repair, null);
|
defaultFlag = false;
|
}
|
}
|
if (middleTableList != null) for (Maintenance_Contract_Asset__c middleTable : middleTableList) {
|
if (repair.SERVICE_CONTRACT_JUDEGE_DAY__C != null
|
&& repair.SERVICE_CONTRACT_JUDEGE_DAY__C >= middleTable.Maintenance_Contract__r.Contract_Start_Date__c
|
&& repair.SERVICE_CONTRACT_JUDEGE_DAY__C <= middleTable.Maintenance_Contract__r.Contract_End_Date__c
|
&& middleTable != null
|
&& middleTable.Maintenance_Contract__r.Status__c == '契約'
|
&& middleTable.Maintenance_Contract__r.Contract_Start_Date__c != null
|
&& middleTable.Maintenance_Contract__r.Contract_End_Date__c != null
|
) {
|
//限次合同产品信息维护相关 FXK 2021/03/05 Start
|
//1.如果记录类型是维修合同 或者 记录类型是服务任务但不是URF限次合同,保持现状
|
//如果最大大修次数大于0,并且已经大修次数 小于 最大大修次数,那么保持现状
|
if (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'Maintenance_Contract'
|
|| (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'NewMaintenance_Contract'
|
&& (middleTable.Maintenance_Contract__r.URF_Contract__c != true
|
|| (middleTable.Maintenance_Contract__r.URF_Contract__c == true
|
&& (middleTable.Series_MaxRepairCount_F__c > 0
|
&& middleTable.Series_RepairCount_F__c < middleTable.Series_MaxRepairCount_F__c))))) {
|
repair.Maintenance_Contract__c = middleTable.Maintenance_Contract__c;
|
// repair.Contract_Principal_Office__c = middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c;
|
// system.debug('555555:' + middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c);
|
// system.debug('mmmmmmmm:' + Trigger.isInsert);
|
// system.debug('nnnnnnn:' + Trigger.isUpdate);
|
repair.repairPlace__c = middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c;
|
//新增逻辑 HWAG-BKP5FB 精琢科技 2020/03/19 Start
|
//wangweipeng 发生数据到SAP以后,修理的维修中心不能做修改
|
// if(repair.SAP_Transfer_time__c == null){
|
if(repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false){
|
repair = RepairTrigger.updateWorkLocationSelect(repair, middleTable);
|
defaultFlag = false;
|
}
|
// 新增逻辑 HWAG-BKP5FB 精琢科技 2020/03/19 End
|
// HWAG-BJABEY LHJ 2019/12/04 Start
|
repair.MaintenanceContractType__c = middleTable.Maintenance_Contract__r.RecordType.Name;
|
// HWAG-BJABEY LHJ 2019/12/04 End
|
}
|
//2.如果记录类型是服务任务并且是URF限次合同,如果最大大修次数为0或者空,那么直接add Error报错 让联系服务管理部;
|
if (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'NewMaintenance_Contract'
|
&& middleTable.Maintenance_Contract__r.URF_Contract__c == true) {
|
if (middleTable.Series_MaxRepairCount_F__c == 0 || middleTable.Series_MaxRepairCount_F__c == null) {
|
//直接add Error报错 让联系服务管理部
|
repair.addError('修理设备不是限次设备,请联系服务管理部');
|
}
|
//如果最大大修次数大于0,并且已经大修次数 大于或等于 最大大修次数,那么不仅不赋值维修合同信息,而且清空当前信息
|
if (middleTable.Series_MaxRepairCount_F__c > 0 && middleTable.Series_RepairCount_F__c >= middleTable.Series_MaxRepairCount_F__c) {
|
//不赋值维修合同信息,而且清空当前信息
|
//URF限次合同2期 LY 20220926 start
|
// repair.Maintenance_Contract__c = null;
|
// repair.MaintenanceContractType__c = null;
|
repair.Maintenance_Contract__c = middleTable.Maintenance_Contract__c;
|
repair.MaintenanceContractType__c = middleTable.Maintenance_Contract__r.RecordType.Name;
|
//URF限次合同2期 LY 20220926 end
|
}
|
}
|
//限次合同产品信息维护相关 FXK 2021/03/05 END
|
needsetnull = false;
|
System.debug( '-----:自动带出维修合同22222');//把保有设备上的维修合同存到修理上
|
break;
|
}
|
}
|
//MaintenanceContractType__c:维修合同记录类型
|
/*如果不在合同中,则将1.‘修理’中的‘维修合同’和‘修理’中的‘维修合同记录类型’清空*/
|
if (needsetnull) {
|
System.debug( '-----:nullにせよ');
|
repair.Maintenance_Contract__c = null;
|
repair.MaintenanceContractType__c = null;
|
}
|
|
System.debug( '-----: repair=' + repair);
|
System.debug( '-----: repair.Maintenance_Contract__c=' + repair.Maintenance_Contract__c);
|
System.debug( '-----: repair.SERVICE_CONTRACT_JUDEGE_DAY__C=' + repair.SERVICE_CONTRACT_JUDEGE_DAY__C);
|
// 设备修理时,自动带出虚拟维修合同
|
List<Maintenance_Contract_Asset__c> middleTableVMList = effectiveContractsVM.get(repair.Delivered_Product__c);
|
// Boolean needsetnull = true;
|
System.debug( '-----:自动带出虚拟维修合同');
|
System.debug( '-----:自动带出虚拟维修合同' + middleTableVMList);
|
// if (middleTableVMList == null) {
|
if (middleTableVMList == null && repair.Exc_work_location__c == false) {
|
if ((repair.NewProductGuarante_Txt__c == '2: 多年保修'
|
|| repair.NewProductGuarante_Txt__c == '2: 服务多年保修'
|
|| repair.NewProductGuarante_Txt__c == '8: 市场多年保修')
|
&& (repair.Sales_Branch__c != repair.Finance_of_Branch__c)) {
|
repair = RepairTrigger.updateWorkLocationSelect(repair, null);
|
defaultFlag = false;
|
}
|
}
|
if (middleTableVMList != null) for (Maintenance_Contract_Asset__c middleTable : middleTableVMList) {
|
if (repair.SERVICE_CONTRACT_JUDEGE_DAY__C != null
|
&& repair.SERVICE_CONTRACT_JUDEGE_DAY__C >= middleTable.startDateGurantee_Text__c
|
&& repair.SERVICE_CONTRACT_JUDEGE_DAY__C <= middleTable.endDateGurantee_Text__c
|
&& middleTable != null
|
&& middleTable.Maintenance_Contract__r.Status__c == '契約'
|
&& middleTable.startDateGurantee_Text__c != null
|
&& middleTable.endDateGurantee_Text__c != null
|
) {
|
repair.VM_Maintenance_Contract__c = middleTable.Maintenance_Contract__c;
|
needsetnull = false;
|
//新增逻辑 SLIU-BMMDWK 精琢科技 2020/03/17 Start
|
// if (repair.VM_Maintenance_Contract__c != null) {
|
if (repair.VM_Maintenance_Contract__c != null && repair.Exc_work_location__c == false) {
|
repair = RepairTrigger.updateWorkLocationSelect(repair, middleTable);
|
defaultFlag = false;
|
}
|
// 新增逻辑 SLIU-BMMDWK 精琢科技 2020/03/17 End
|
break;
|
}
|
}
|
if (needsetnull) {
|
System.debug( '-----:nullにせよ');
|
repair.VM_Maintenance_Contract__c = null;
|
}
|
|
//add wangweipeng 2021/12/10 start
|
if(defaultFlag){
|
//一般修理品的维修中心赋值逻辑
|
//SAP上传修理时间
|
if(repair.SAP_Transfer_time__c == null){
|
if(repair.On_site_repair__c == 'RC修理'||repair.On_site_repair__c== '直送SORC修理'||repair.On_site_repair__c== '直送OGZ修理' ){
|
System.debug('-----------------11------');
|
repair = RepairTrigger.generalUpdateWorkLocationSelect(repair);
|
}
|
}
|
}
|
//add wangweipeng 2021/12/10 end
|
}
|
|
System.debug( '-----: 维修合同结束');
|
|
// 20160727 add 计算修理工作日
|
RepairTrigger.setRepairWorkday(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
|
//
|
if (Trigger.isUpdate) {
|
/****************************************************************************************************/
|
//迁移进程生成器中repair Alltime功能 Start
|
/****************************************************************************************************/
|
for (Repair__c a : Trigger.new) {
|
String StatusStr = '';
|
if (a.Delete_Flag__c == true) {
|
StatusStr = '0.删除';
|
} else if (a.RepairOrderStatusCode__c == 'A99' && a.IncorrectDataComment__c != null) {
|
StatusStr = '0.删除';
|
} else if ((a.RepairOrderStatusCode__c == 'A95' || a.RepairOrderStatusCode__c == 'A96')
|
&& a.Return_Without_Repair_IF__c == true) {
|
StatusStr = '0.取消';
|
} else if (a.Finish_Check__c == 1) {
|
StatusStr = '5.完毕';
|
} else if (a.Facility_Return_Receipt_Collection_Date__c != null
|
|| a.Repair_Returned_To_HP_Date__c != null
|
|| a.Repair_Shipped_Date__c != null) {
|
StatusStr = '4.修理品返送阶段';
|
} else if (a.Repair_Final_Inspection_Date__c != null
|
|| a.Repair_Completed_Date__c != null
|
|| a.Repair_Start_Date__c != null) {
|
StatusStr = '3.维修阶段';
|
} else if (a.Agreed_Date__c != null
|
|| a.Repair_Discount_Date__c != null
|
|| a.Repair_Estimated_Date__c != null
|
|| a.Repair_Inspection_Date__c != null) {
|
StatusStr = '2.维修报价阶段';
|
} else {
|
StatusStr = a.Status__c;
|
}
|
|
a.Status__c = a.Status1__c;
|
// DOJ2.1 gzw AwareDate公式考文本 start
|
if (a.AwareDate__c != a.Aware_date__c &&
|
(a.Aware_date__c >= Date.newInstance(2021, 9, 1) ||
|
a.AwareDate__c >= Date.newInstance(2021, 9, 1) )) {
|
a.Aware_date__c = a.AwareDate__c;
|
}
|
// DOJ2.1 gzw AwareDate公式考文本 end
|
|
/****************************************************************************************************/
|
//迁移进程生成器中repair Alltime功能 End
|
/****************************************************************************************************/
|
}
|
}
|
}
|
// ----------------------------------------------------------------------
|
// ここまで、サービスコントラクト項目を自動的に更新するロジック
|
// ----------------------------------------------------------------------
|
|
|
// ----------------------------------------------------------------------
|
// これより、On-Callの「On-Call跟进结果」を更新するロジック
|
// ----------------------------------------------------------------------
|
|
if ( ( Trigger.isBefore && ( Trigger.isInsert || Trigger.isUpdate)) || ( Trigger.isAfter && Trigger.isDelete)) {
|
|
// 処理対象となる修理を全部確保
|
List<Repair__c> repairs = ( Trigger.isBefore ? Trigger.New : new List<Repair__c>());
|
Set<Id> cncallIds = new Set<Id>();
|
for ( Repair__c repair : ( Trigger.isBefore ? Trigger.New : Trigger.Old)) {
|
if (String.isBlank(repair.On_Call_ID__c) == false) {
|
cncallIds.add( repair.On_Call_ID__c);
|
}
|
}
|
|
// 処理対象となるオンコールを全部確保
|
|
// 20210622 SQL优化 Start
|
// List<On_Call__c> oncalls = OncallFinalStatusManager.getOncallList(cncallIds);
|
List<On_Call__c> oncalls = new List<On_Call__c>();
|
if (cncallIds.size() > 0 ) {
|
oncalls = OncallFinalStatusManager.getOncallList(cncallIds);
|
}
|
// 20210622 SQL优化 End
|
|
if (oncalls.size() > 0) {
|
// 処理対象となるQISを全部確保
|
List<QIS_Report__c> qiss = OncallFinalStatusManager.getQisListFronOncalls(oncalls);
|
|
// FinalStatus更新処理
|
OncallFinalStatusManager.setFinalStatus( oncalls, repairs, qiss);
|
|
OncallFinalStatusManager.updOncalls(oncalls);
|
}
|
}
|
|
// ----------------------------------------------------------------------
|
// ここまで、On-Callの「On-Call跟进结果」を更新するロジック
|
// ----------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------
|
// これより、备品借出申请の「修理最终检测日」を更新するロジック(更新后触发WorkFlow)
|
// ----------------------------------------------------------------------
|
if (Trigger.isAfter && Trigger.isUpdate) {
|
|
System.debug( '-----: sendEmailByInspectionFailureCause start');
|
//【委托】【QA部门】IISE多次同步课题 WLIG-CJJDAV start
|
RepairTrigger.sendEmailByInspectionFailureCause(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
|
//【委托】【QA部门】IISE多次同步课题 WLIG-CJJDAV end
|
|
Map<String, Date> repairDateMap = new Map<String, Date>();
|
List<String> targetRepairList = new List<String>();
|
for (Repair__c repair : Trigger.New) {
|
Repair__c oldRepair = Trigger.OldMap.get(repair.Id);
|
if (oldRepair.Repair_Final_Inspection_Date__c != repair.Repair_Final_Inspection_Date__c) {
|
repairDateMap.put(repair.Id, repair.Repair_Final_Inspection_Date__c);
|
targetRepairList.add(repair.Id);
|
}
|
}
|
// 20210622 SQL优化 Start
|
//List<Rental_Apply__c> raList = [select Id, Repair__c from Rental_Apply__c where Repair__c = :targetRepairList];
|
List<Rental_Apply__c> raList = new List<Rental_Apply__c>();
|
if (targetRepairList.size() > 0) {
|
raList = [select Id, Repair__c from Rental_Apply__c where Repair__c = :targetRepairList];
|
}
|
// 20210622 SQL优化 End
|
for (Rental_Apply__c ra : raList) {
|
ra.Repair_Final_Inspection_Date__c = repairDateMap.get(ra.Repair__c);
|
}
|
if (raList.size() > 0) {
|
update raList;
|
}
|
}
|
// ----------------------------------------------------------------------
|
// ここまで、备品借出申请の「修理最终检测日」を更新するロジック
|
// ----------------------------------------------------------------------
|
|
|
// 2022-12-22 zyh add Start
|
if (Trigger.isAfter && Trigger.isUpdate) {
|
List < String > rprIds = new List < String > ();
|
Map < Id, Id > rprIdMap = new Map < Id, Id > ();
|
for (Repair__c rpr: Trigger.new) {
|
Repair__c oldrpr = Trigger.oldMap.get(rpr.Id);
|
// 修理有报修子单号,并且 待发送AWS为false 发送给AWS
|
if (String.isNotBlank(rpr.RepairSubOrder__c) && !rpr.AwaitToSendAWS__c) {
|
if ((rpr.DescriptionName__c != oldrpr.DescriptionName__c)
|
|| (rpr.InspectionResultFlag__c != oldrpr.InspectionResultFlag__c)
|
|| (rpr.RepairReasonTrigger__c != oldrpr.RepairReasonTrigger__c)) {
|
if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
|
NFM603Controller.NFM603_Ids.add(rpr.Id);
|
rprIdMap.put(rpr.Id, rpr.Id);
|
System.debug('111111111111111111112222222222');
|
}
|
}
|
}
|
}
|
rprIds = rprIdMap.values();
|
|
if (rprIds.size() > 0) {
|
BatchIF_Log__c iflog = new BatchIF_Log__c();
|
iflog.Type__c = 'NFM603';
|
iflog.Log__c = 'callout start\n';
|
insert iflog;
|
// 2022-04-29 zyh update start
|
if(UserInfo.getUserId().equals(System.Label.interfaceUserID)){
|
NFM603Controller.executefuture(iflog, rprIds);
|
}else{
|
NFM603Controller.callout(iflog.Id, rprIds);
|
}
|
// 2022-04-29 zyh update end
|
}
|
}
|
// 2022-12-22 zyh add END
|
System.debug( '-----: trigger end');
|
}
|
public void test(){
|
Integer i =0;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
|
}
|
}
|