From 9b1ecb1121418796bd6f4dde2c6258cc48302e68 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 12 二月 2019 15:58:31 +0800
Subject: [PATCH] 5819 【后端】【1.6】运营活动支持对应不同的职业和世界等级(累计充值修改)

---
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py |  385 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 381 insertions(+), 4 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 06561ca..6646cd1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -173,6 +173,21 @@
                         ("BYTE", "MoneyType", 0),
                         ("BYTE", "PacketCnt", 0),
                         ("BYTE", "LeaderOwn", 0),
+                        ("char", "PacketOpenTime", 0),
+                        ("BYTE", "ValidMinutes", 0),
+                        ),
+
+                "ActFeastRedPacket":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "ActMark", 0),
+                        ("list", "PlatformList", 0),
+                        ("list", "ServerIDList", 0),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("BYTE", "IsDayReset", 0),
+                        ("BYTE", "ResetType", 0),
+                        ("list", "RedPacketIDList", 0),
+                        ("WORD", "LVLimit", 0),
                         ),
 
                 "FuncOpenLV":(
@@ -377,9 +392,103 @@
                         ("BYTE", "IsDayReset", 0),
                         ),
 
+                "CrossZoneComm":(
+                        ("char", "CrossZoneName", 1),
+                        ("BYTE", "ZoneID", 1),
+                        ("list", "ServerGroupIDList", 0),
+                        ),
+
+                "CrossZonePK":(
+                        ("char", "CrossZoneName", 1),
+                        ("BYTE", "ZoneID", 1),
+                        ("char", "ZoneName", 0),
+                        ("list", "ServerGroupIDList", 0),
+                        ),
+
+                "CrossRealmPKSeason":(
+                        ("char", "CrossZoneName", 1),
+                        ("BYTE", "ZoneID", 1),
+                        ("BYTE", "SeasonID", 0),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("char", "EndTime", 0),
+                        ),
+
                 "CrossRealmPKDan":(
                         ("BYTE", "DanLV", 1),
                         ("WORD", "LVUpScore", 0),
+                        ("list", "MatchRange", 0),
+                        ),
+
+                "CrossPenglaiZoneMap":(
+                        ("BYTE", "ZoneID", 0),
+                        ("DWORD", "MapID", 1),
+                        ("DWORD", "DataMapID", 1),
+                        ("BYTE", "CopyMapID", 1),
+                        ),
+
+                "ActWeekParty":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "ActMark", 0),
+                        ("list", "PlatformList", 0),
+                        ("list", "ServerIDList", 0),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("WORD", "AdvanceMinutes", 0),
+                        ("BYTE", "IsDayReset", 0),
+                        ("BYTE", "ResetType", 0),
+                        ("dict", "NotifyInfoStart", 0),
+                        ("dict", "NotifyInfoEnd", 0),
+                        ("WORD", "LVLimit", 0),
+                        ),
+
+                "ActLoginAward":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "ActMark", 0),
+                        ("list", "PlatformList", 0),
+                        ("list", "ServerIDList", 0),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("WORD", "AdvanceMinutes", 0),
+                        ("BYTE", "IsDayReset", 0),
+                        ("BYTE", "ResetType", 0),
+                        ("dict", "NotifyInfoStart", 0),
+                        ("dict", "NotifyInfoEnd", 0),
+                        ("WORD", "LVLimit", 0),
+                        ),
+
+                "ActFeastWeekParty":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "ActMark", 0),
+                        ("list", "PlatformList", 0),
+                        ("list", "ServerIDList", 0),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("WORD", "AdvanceMinutes", 0),
+                        ("BYTE", "IsDayReset", 0),
+                        ("BYTE", "ResetType", 0),
+                        ("dict", "NotifyInfoStart", 0),
+                        ("dict", "NotifyInfoEnd", 0),
+                        ("WORD", "LVLimit", 0),
+                        ),
+
+                "ActNewFairyCeremony":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "ActMark", 0),
+                        ("list", "PlatformList", 0),
+                        ("list", "ServerIDList", 0),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("BYTE", "ResetType", 0),
+                        ("dict", "NotifyInfoStart", 0),
+                        ("dict", "NotifyInfoEnd", 0),
+                        ("WORD", "LVLimit", 0),
+                        ),
+
+                "NewUniquenessArrive":(
+                        ("BYTE", "WorldLvNum", 1),
+                        ("DWORD", "Rank", 1),
+                        ("dict", "Award", 0),
                         ),
                 }
 
@@ -676,7 +785,9 @@
         self.MoneyNum = 0
         self.MoneyType = 0
         self.PacketCnt = 0
-        self.LeaderOwn = 0
+        self.LeaderOwn = 0
+        self.PacketOpenTime = ""
+        self.ValidMinutes = 0
         return
         
     def GetID(self): return self.ID # ID
@@ -684,7 +795,36 @@
     def GetMoneyNum(self): return self.MoneyNum # 红包额度
     def GetMoneyType(self): return self.MoneyType # 金钱类型
     def GetPacketCnt(self): return self.PacketCnt # 红包个数
-    def GetLeaderOwn(self): return self.LeaderOwn # 是否归属盟主
+    def GetLeaderOwn(self): return self.LeaderOwn # 是否归属盟主
+    def GetPacketOpenTime(self): return self.PacketOpenTime # 发放红包时间yyyy-MM-dd hh:mm
+    def GetValidMinutes(self): return self.ValidMinutes # 红包有效时长(分)
+
+# 节日红包时间表
+class IPY_ActFeastRedPacket():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.ActMark = ""
+        self.PlatformList = []
+        self.ServerIDList = []
+        self.StartDate = ""
+        self.EndDate = ""
+        self.IsDayReset = 0
+        self.ResetType = 0
+        self.RedPacketIDList = []
+        self.LVLimit = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetActMark(self): return self.ActMark # 活动组标记
+    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+    def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+    def GetRedPacketIDList(self): return self.RedPacketIDList # 每日对应红包ID列表[[第一天红包ID列表], ...]
+    def GetLVLimit(self): return self.LVLimit # 限制等级
 
 # 等级开启功能
 class IPY_FuncOpenLV():
@@ -1106,16 +1246,213 @@
     def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
     def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
 
+# 跨服分区表通用
+class IPY_CrossZoneComm():
+    
+    def __init__(self):
+        self.CrossZoneName = ""
+        self.ZoneID = 0
+        self.ServerGroupIDList = []
+        return
+        
+    def GetCrossZoneName(self): return self.CrossZoneName # 跨服分区名
+    def GetZoneID(self): return self.ZoneID # 赛区ID
+    def GetServerGroupIDList(self): return self.ServerGroupIDList # 赛区服务器组ID列表
+
+# 跨服分区表竞技场
+class IPY_CrossZonePK():
+    
+    def __init__(self):
+        self.CrossZoneName = ""
+        self.ZoneID = 0
+        self.ZoneName = ""
+        self.ServerGroupIDList = []
+        return
+        
+    def GetCrossZoneName(self): return self.CrossZoneName # 跨服分区名
+    def GetZoneID(self): return self.ZoneID # 赛区ID
+    def GetZoneName(self): return self.ZoneName # 赛区名字
+    def GetServerGroupIDList(self): return self.ServerGroupIDList # 赛区服务器组ID列表
+
+# 跨服竞技场赛季表
+class IPY_CrossRealmPKSeason():
+    
+    def __init__(self):
+        self.CrossZoneName = ""
+        self.ZoneID = 0
+        self.SeasonID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.EndTime = ""
+        return
+        
+    def GetCrossZoneName(self): return self.CrossZoneName # 跨服分区名
+    def GetZoneID(self): return self.ZoneID # 赛区ID
+    def GetSeasonID(self): return self.SeasonID # 赛季ID
+    def GetStartDate(self): return self.StartDate # 开始日期	yyyy-MM-dd
+    def GetEndDate(self): return self.EndDate # 结束日期	yyyy-MM-dd
+    def GetEndTime(self): return self.EndTime # 结算时间	hh:mm
+
 # 跨服竞技场段位表
 class IPY_CrossRealmPKDan():
     
     def __init__(self):
         self.DanLV = 0
-        self.LVUpScore = 0
+        self.LVUpScore = 0
+        self.MatchRange = []
         return
         
     def GetDanLV(self): return self.DanLV # 段位等级
-    def GetLVUpScore(self): return self.LVUpScore # 升段位所需积分
+    def GetLVUpScore(self): return self.LVUpScore # 升段位所需积分
+    def GetMatchRange(self): return self.MatchRange # 可匹配到的玩家段位区间 [从段位A, 到段位B],配[]代表只匹配本段位的
+
+# 跨服Boss蓬莱仙境分区地图表
+class IPY_CrossPenglaiZoneMap():
+    
+    def __init__(self):
+        self.ZoneID = 0
+        self.MapID = 0
+        self.DataMapID = 0
+        self.CopyMapID = 0
+        return
+        
+    def GetZoneID(self): return self.ZoneID # 分区ID
+    def GetMapID(self): return self.MapID # 场景地图ID
+    def GetDataMapID(self): return self.DataMapID # 数据地图ID
+    def GetCopyMapID(self): return self.CopyMapID # 虚拟线路ID
+
+# 周狂欢活动时间表
+class IPY_ActWeekParty():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.ActMark = ""
+        self.PlatformList = []
+        self.ServerIDList = []
+        self.StartDate = ""
+        self.EndDate = ""
+        self.AdvanceMinutes = 0
+        self.IsDayReset = 0
+        self.ResetType = 0
+        self.NotifyInfoStart = {}
+        self.NotifyInfoEnd = {}
+        self.LVLimit = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetActMark(self): return self.ActMark # 活动组标记
+    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+    def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetAdvanceMinutes(self): return self.AdvanceMinutes # 前端提前X分钟展示活动
+    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+    def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
+    def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+
+# 登录奖励时间表
+class IPY_ActLoginAward():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.ActMark = ""
+        self.PlatformList = []
+        self.ServerIDList = []
+        self.StartDate = ""
+        self.EndDate = ""
+        self.AdvanceMinutes = 0
+        self.IsDayReset = 0
+        self.ResetType = 0
+        self.NotifyInfoStart = {}
+        self.NotifyInfoEnd = {}
+        self.LVLimit = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetActMark(self): return self.ActMark # 活动组标记
+    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+    def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetAdvanceMinutes(self): return self.AdvanceMinutes # 前端提前X分钟展示活动
+    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+    def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
+    def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+
+# 节日巡礼活动时间表
+class IPY_ActFeastWeekParty():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.ActMark = ""
+        self.PlatformList = []
+        self.ServerIDList = []
+        self.StartDate = ""
+        self.EndDate = ""
+        self.AdvanceMinutes = 0
+        self.IsDayReset = 0
+        self.ResetType = 0
+        self.NotifyInfoStart = {}
+        self.NotifyInfoEnd = {}
+        self.LVLimit = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetActMark(self): return self.ActMark # 活动组标记
+    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+    def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetAdvanceMinutes(self): return self.AdvanceMinutes # 前端提前X分钟展示活动
+    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+    def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
+    def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+
+# 新仙界盛典活动时间表
+class IPY_ActNewFairyCeremony():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.ActMark = ""
+        self.PlatformList = []
+        self.ServerIDList = []
+        self.StartDate = ""
+        self.EndDate = ""
+        self.ResetType = 0
+        self.NotifyInfoStart = {}
+        self.NotifyInfoEnd = {}
+        self.LVLimit = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetActMark(self): return self.ActMark # 活动组标记
+    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+    def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置;2-5点开始0点结束
+    def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
+    def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+
+# 新仙界盛典-绝版降临表
+class IPY_NewUniquenessArrive():
+    
+    def __init__(self):
+        self.WorldLvNum = 0
+        self.Rank = 0
+        self.Award = {}
+        return
+        
+    def GetWorldLvNum(self): return self.WorldLvNum # 世界等级档
+    def GetRank(self): return self.Rank # 排名
+    def GetAward(self): return self.Award # 奖励 {"职业":[[物品ID,个数,是否绑定],...], ...}
 
 
 def Log(msg, playerID=0, par=0):
@@ -1173,6 +1510,8 @@
         self.ipyQuestionBankLen = len(self.ipyQuestionBankCache)
         self.ipyFamilyRedPackCache = self.__LoadFileData("FamilyRedPack", IPY_FamilyRedPack)
         self.ipyFamilyRedPackLen = len(self.ipyFamilyRedPackCache)
+        self.ipyActFeastRedPacketCache = self.__LoadFileData("ActFeastRedPacket", IPY_ActFeastRedPacket)
+        self.ipyActFeastRedPacketLen = len(self.ipyActFeastRedPacketCache)
         self.ipyFuncOpenLVCache = self.__LoadFileData("FuncOpenLV", IPY_FuncOpenLV)
         self.ipyFuncOpenLVLen = len(self.ipyFuncOpenLVCache)
         self.ipyChinNPCCache = self.__LoadFileData("ChinNPC", IPY_ChinNPC)
@@ -1205,8 +1544,26 @@
         self.ipyActWishingWellLen = len(self.ipyActWishingWellCache)
         self.ipyActTotalRechargeCache = self.__LoadFileData("ActTotalRecharge", IPY_ActTotalRecharge)
         self.ipyActTotalRechargeLen = len(self.ipyActTotalRechargeCache)
+        self.ipyCrossZoneCommCache = self.__LoadFileData("CrossZoneComm", IPY_CrossZoneComm)
+        self.ipyCrossZoneCommLen = len(self.ipyCrossZoneCommCache)
+        self.ipyCrossZonePKCache = self.__LoadFileData("CrossZonePK", IPY_CrossZonePK)
+        self.ipyCrossZonePKLen = len(self.ipyCrossZonePKCache)
+        self.ipyCrossRealmPKSeasonCache = self.__LoadFileData("CrossRealmPKSeason", IPY_CrossRealmPKSeason)
+        self.ipyCrossRealmPKSeasonLen = len(self.ipyCrossRealmPKSeasonCache)
         self.ipyCrossRealmPKDanCache = self.__LoadFileData("CrossRealmPKDan", IPY_CrossRealmPKDan)
         self.ipyCrossRealmPKDanLen = len(self.ipyCrossRealmPKDanCache)
+        self.ipyCrossPenglaiZoneMapCache = self.__LoadFileData("CrossPenglaiZoneMap", IPY_CrossPenglaiZoneMap)
+        self.ipyCrossPenglaiZoneMapLen = len(self.ipyCrossPenglaiZoneMapCache)
+        self.ipyActWeekPartyCache = self.__LoadFileData("ActWeekParty", IPY_ActWeekParty)
+        self.ipyActWeekPartyLen = len(self.ipyActWeekPartyCache)
+        self.ipyActLoginAwardCache = self.__LoadFileData("ActLoginAward", IPY_ActLoginAward)
+        self.ipyActLoginAwardLen = len(self.ipyActLoginAwardCache)
+        self.ipyActFeastWeekPartyCache = self.__LoadFileData("ActFeastWeekParty", IPY_ActFeastWeekParty)
+        self.ipyActFeastWeekPartyLen = len(self.ipyActFeastWeekPartyCache)
+        self.ipyActNewFairyCeremonyCache = self.__LoadFileData("ActNewFairyCeremony", IPY_ActNewFairyCeremony)
+        self.ipyActNewFairyCeremonyLen = len(self.ipyActNewFairyCeremonyCache)
+        self.ipyNewUniquenessArriveCache = self.__LoadFileData("NewUniquenessArrive", IPY_NewUniquenessArrive)
+        self.ipyNewUniquenessArriveLen = len(self.ipyNewUniquenessArriveCache)
         Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
         Log("IPY_DataMgr InitOK!")
         return
@@ -1405,6 +1762,8 @@
     def GetQuestionBankByIndex(self, index): return self.ipyQuestionBankCache[index]
     def GetFamilyRedPackCount(self): return self.ipyFamilyRedPackLen
     def GetFamilyRedPackByIndex(self, index): return self.ipyFamilyRedPackCache[index]
+    def GetActFeastRedPacketCount(self): return self.ipyActFeastRedPacketLen
+    def GetActFeastRedPacketByIndex(self, index): return self.ipyActFeastRedPacketCache[index]
     def GetFuncOpenLVCount(self): return self.ipyFuncOpenLVLen
     def GetFuncOpenLVByIndex(self, index): return self.ipyFuncOpenLVCache[index]
     def GetChinNPCCount(self): return self.ipyChinNPCLen
@@ -1437,8 +1796,26 @@
     def GetActWishingWellByIndex(self, index): return self.ipyActWishingWellCache[index]
     def GetActTotalRechargeCount(self): return self.ipyActTotalRechargeLen
     def GetActTotalRechargeByIndex(self, index): return self.ipyActTotalRechargeCache[index]
+    def GetCrossZoneCommCount(self): return self.ipyCrossZoneCommLen
+    def GetCrossZoneCommByIndex(self, index): return self.ipyCrossZoneCommCache[index]
+    def GetCrossZonePKCount(self): return self.ipyCrossZonePKLen
+    def GetCrossZonePKByIndex(self, index): return self.ipyCrossZonePKCache[index]
+    def GetCrossRealmPKSeasonCount(self): return self.ipyCrossRealmPKSeasonLen
+    def GetCrossRealmPKSeasonByIndex(self, index): return self.ipyCrossRealmPKSeasonCache[index]
     def GetCrossRealmPKDanCount(self): return self.ipyCrossRealmPKDanLen
     def GetCrossRealmPKDanByIndex(self, index): return self.ipyCrossRealmPKDanCache[index]
+    def GetCrossPenglaiZoneMapCount(self): return self.ipyCrossPenglaiZoneMapLen
+    def GetCrossPenglaiZoneMapByIndex(self, index): return self.ipyCrossPenglaiZoneMapCache[index]
+    def GetActWeekPartyCount(self): return self.ipyActWeekPartyLen
+    def GetActWeekPartyByIndex(self, index): return self.ipyActWeekPartyCache[index]
+    def GetActLoginAwardCount(self): return self.ipyActLoginAwardLen
+    def GetActLoginAwardByIndex(self, index): return self.ipyActLoginAwardCache[index]
+    def GetActFeastWeekPartyCount(self): return self.ipyActFeastWeekPartyLen
+    def GetActFeastWeekPartyByIndex(self, index): return self.ipyActFeastWeekPartyCache[index]
+    def GetActNewFairyCeremonyCount(self): return self.ipyActNewFairyCeremonyLen
+    def GetActNewFairyCeremonyByIndex(self, index): return self.ipyActNewFairyCeremonyCache[index]
+    def GetNewUniquenessArriveCount(self): return self.ipyNewUniquenessArriveLen
+    def GetNewUniquenessArriveByIndex(self, index): return self.ipyNewUniquenessArriveCache[index]
 
 IPYData = IPY_DataMgr()
 def IPY_Data(): return IPYData

--
Gitblit v1.8.0