cehua_ZWJ
2019-01-30 6afaa4408f4e09e3e95dbd92f0d1cd5a1fb2942b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
°h5\c@s¤ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZdZdZdZdZdZdZdZd    Zd
Zd Zd Z e!d ƒ\Z"Z#Z$e!d ƒ\Z%Z&Z'd„Z(d„Z)d„Z*d„Z+d„Z,d„Z-d„Z.d„Z/d„Z0d„Z1d„Z2d„Z3d„Z4d„Z5d„Z6d„Z7e8d„Z9d„Z:d „Z;d!„Z<d"„Z=d#„Z>d$„Z?d%„Z@d&„ZAd'„ZBd(„ZCd)„ZDd*„ZEd+„ZFd,„ZGd-„ZHd.„ZIdS(/iÿÿÿÿNs FBPD_Score%st FBPD_KillCnttFBPD_LastCheckTicktFBPD_LastCheckTick1tFBPD_ContKillCntExsFBPlayerDict_TotalExp%ssFBPlayerDict_TotalExpPoint%st FBPD_EnemyIDt RebornBuffLVtMap_ElderBattlefield_StartTicktMap_ElderBattlefield_TopPlayericCs5tjƒjƒ}|tjkr1t|tƒndS(N(t    GameWorldtGetMaptGetMapIDtChConfigtDef_FBMapID_ElderBattlefieldtOnElderBattlefieldFBResulttTrue(t    curPlayertmapID((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnFBPlayerOnLoginIscCsWtjd|ƒ|dkrLtjƒjt|ƒtjƒjtdƒntƒdS(Ns!    ÉϹÅÕ½³¡»î¶¯×´Ì¬±ä¸ü state=%sii(RtDebugLogt GetGameWorldtSetGameWorldDictRRt GiveJoinPrize(tstatettick((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnElderBattlefieldStateChangeOs  cCsetjƒjƒ}tjƒjƒd}tj||ƒ}|rax|D]}tj|ƒqGWndS(Ni(    RR    R
Rt GetPropertyIDtFBCommontGetFBLineRefreshNPCtNPCCustomRefreshtSetNPCRefreshByID(RRtlineIDt refreshIDListt    refreshID((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnOpenFBds cCstjƒjdƒdS(Ni(RRt SetPropertyID(R((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyt    OnCloseFBsscCstjd||fƒtS(NsOnEnterFBEvent map %s - %s(RRR(RRRR((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnEnterFBEvent~scCstjd|jƒƒtjS(NsOnChangeMapAsk  CopyMapID=%s(RRt GetCopyMapIDt IPY_GameWorldt    cmeAccept(taskR((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnChangeMapAskˆsc    CsØ|jƒ}tjd|ƒtjƒ}|jƒ}tjƒjtƒ}tdt    j
t j ƒd||ƒ}|s‡t j|ƒdS|jtjd|tƒt    jƒsÒtjƒjƒd}t    j|ƒnt    j|ƒsŸt    j|ƒt    j|t j ƒrÇt j|t jdƒtjƒjt|dƒtjƒjt|dƒtjƒjt|dƒtj |t j dt j!ƒt"j#|t j$dƒqÇn(tjƒj%|t&ƒ}t'|||ƒt(||ƒdS(Ns DoEnterFB...iièi()t GetPlayerIDRRt    GetGameFBt    GetFBStepRtGetGameWorldDictByKeyRtmaxRtGetFBLineStepTimeR R t PlayerControlt PlayerLeaveFBt Sync_TimeTickR&t tttTowerTakeRtGetHadSetFBPropertyMarkRtSetFBPropertyMarktGetHadDelTickettSetHadDelTickettAddEnterFBCounttNomalDictSetPropertyt%Def_Player_Dict_ElderBattlefieldStageRtFBPlayerDict_ScoretFBPlayerDict_TotalExptFBPlayerDict_TotalExpPointt EventReportt WriteEvent_FBt CME_Log_StarttPlayerWeekPartytAddWeekPartyActionCnttDef_WPAct_ElderBattlefieldtGetPlayerGameFBDictByKeytFBPlayerDict_RebornBuffLVt__DoAddRebornBufftDoFBHelp(    RRtplayerIDtgameFBtfbStept    startTicktcloseFB_RemainTickRt rebornBuffLV((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyt    DoEnterFB”s4   '    cCs tj|ƒS(N(trandomtchoice(RRtlineIdtipyEnterPosInfoR((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnGetFBEnterPos½scCsytjtjdƒ}tj|ƒ}t|ƒdkr<dn|d}tj|d|d|ƒ}|j    ƒ|j
ƒfS(Niiii( RtGetFBLineEnterPosInfoR R RORPtlentGameMaptGetEmptyPlaceInAreatGetPosXtGetPosY(RRtenterPostdisttposPoint((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyt __GetRandPosÂs
"cCsrtjdƒ}x!|D]}tj|||ƒqWtjddƒ}tj|||ƒtj|jƒtƒdS(NtElderBattlefieldBufftElderBattlefieldRoboti(    t IpyGameDataPYtGetFuncEvalCfgt    BuffSkilltDelBuffBySkillIDt
GetFuncCfgRtUpdFBLineNPCStrengthenLVR*R(RRt
buffIDListtbuffIDt skillBuffID((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytDoExitFBÎs cCsdS(N((RR((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytDoPlayerLeaveFBÝscCsU|jƒ}tjƒ}|j|tdƒ|j|tdƒ|j|tdƒdS(Ni(tGetIDRR+tSetPlayerGameFBDicttFBPlayerDict_ContKillCntExtFBPlayerDict_EnemyIDRE(RRHRI((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytDoPlayerChangeMapLogicãs   cCs/tjƒjƒ}|tkrFtjtjƒr+tjt    |ƒq+nå|t    kr+tjtjƒstj
ƒj t ƒ}|rêt jdƒ}|rÑtjd|g|ƒtjddtj|ddgƒntj
ƒjt dƒntjt|ƒtjƒtj|ƒq+t|ƒt|ƒndS(NtElderBattlefieldTopAwardtElderBattlefieldTopMailitElderBattlefieldBest(RR+R,t FB_Step_OpenRtGetFBFuncOpenStateR R t    SetFBSteptFB_Step_FightingRR-RR`RaR0t SendMailByKeyt WorldNotifyt
PyGameDatatg_sgzztopPlayerNameRt FB_Step_OvertDoLogic_FBKickAllPlayertGameWorldProcesstCloseFBt__CheckRefreshBuffNPCt__RefreshRobot(RRJt topPlayerIDt topAwardList((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyt    OnProcessòs&  '
 
 cCsotjƒ}|jtƒ}|r5||dkr5dS|jt|ƒtjddƒ}tjddƒ}g}d}tjƒ}xst    |j
ƒƒD]_}|j |ƒ}    |    j ƒ}
|
|krÇq”n||    j ƒ7}|    j ƒs”|j|
ƒq”q”W||} | s dStj|ƒtjddƒ} x1||  D]%} tj| | dfgddƒq5Wtj|ƒdS(Ni'R^iiiii(RR+tGetGameFBDictByKeyRt SetGameFBDictR`RaRdt GetNPCManagertxrangetGetCustomNPCRefreshCounttGetCustomNPCRefreshAttGetRefreshMarktGetCounttappendROtshuffleRt SetNPCRefreshtProcessAllNPCRefresh(RRIt lastCheckTicktallRmarktmaxCntt    rmarkListtnpcCnttgameNPCtit
npcRefreshtrmarkt
needAddCnttnpcIDtrMark((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyRs6     
 # cCstjƒ}|jtƒ}|r5||dkr5dS|jt|ƒtjƒjƒ}tjj    |gƒ}t
j ddiƒ}tjƒj ƒd}||kr§dS|jt jƒ}tjƒjƒdksØ| rÜdSt
j ddƒ}d}    i}
tjƒ} xgt| jƒƒD]S} | j| ƒ} | jƒ}||krLqn| jƒ}||
|<|    |7}    qW||}tjƒjƒ}t|t||tƒ}||    t|ƒ}t
jdƒ}d}x0|D](}|||dkrõPn|d7}q×W||tj|<||}|dkrt
j dd    iƒj    |dƒ}|sUdStj|ƒd}x•t|ƒD]‡\} }||kr‘Pn|
j    |dƒ}| t|ƒdkr¿dn||}||7}||}tj |||fg||ƒquWtj!|ƒndS(
NiÐtElderBattlefieldCfgiiiR_iièi("RR+R„RR…Rt    GetLineIDRytg_elderBattleRobotDieDicttgetR`RaRR tDef_FB_NPCStrengthenMaxLVtGetMapCopyPlayerManagertGetPlayerCountR†R‡RˆR‰RŠR‹tmint Def_TotalCntt Def_RobotCntRURdRORt    enumerateRRŽR(RRIRtfblineidtg_elderBattleRobotDieListt robotCfgDictRt
robotMaxLVR“t    curNPCCntt robotCntDictR•R–R—R˜tcnttrobotCfgt curPlayerCntt maxRobotCnttextraCntt
rebornTimet    rebornCnttdieTickt
refreshCntRšt hasRefreshCntR›tcurCntt    curMaxCnt((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyR€2sl      
 
 
 !  &
 
#cCsetjƒ}xRt|jƒƒD]>}|j|ƒ}|dks|jƒ rSqnt|ƒqWdS(N(RtGetPlayerManagerR‡R¢tGetPlayerByIndextNonet    GetInitOKR (t playerManagerR–R((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyRus cCsL|jtjdƒ}|sdStjd||jƒƒd}tjtj|ƒ}|j    |gƒ}t
j |t j t jgƒ}t
j||tƒ}| r«| r«dSg}x*|D]"\}    }
|j|    |
dgƒq¸Wx0|jƒD]"\}    }
|j|    |
dgƒqëWt|ƒ} tj|tj| ƒ} tjƒjƒ} | tjksh|sh| | krœtj| tjkrƒdnd|jƒg|ƒn–xE|D]=\}    }
}tj||    |
|tjgddtigƒq£Witj|ƒtj6tj|jƒƒtj 6}tj!|tj|d|ƒtj"|tjdƒdS(Nis)    Íæ¼Ò´¦ÀíÉϹÅÕ½³¡½áËãÐÅÏ¢ , isLogin=%sitElderBattlefieldMailtElderBattlefieldMail2teventtElderBattlefield(#tNomalDictGetPropertyR R:RRR*RtGetFBLineRewardR RŸt PlayerSuccesstGetCanGetAwardSuccByTypet ShareDefinetSuccType_ElderBattlefieldKillt SuccType_ElderBattlefieldConKillt GiveSuccAwardtFalseRŒtitemsRUt
ItemCommontGetItemPackSpaceR&trptItemR    R
R0Rwt ItemControlertGivePlayerItemtGetJsonItemListt Over_itemInfotOver_succItemInfot NotifyFBOverR9(RtisLogintcurStageRt fbRewardDicttitemListt
succIDListt succAwardDicttrewardItemListtitemIDtitemCntt    needSpacet
emptySpaceRtisBindtoverDict((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyR s6 !422cCsè|jƒ}tjƒ}|jt|ƒ|}|jt||ƒ|jtƒ}| sr||jt|ƒkr°|jt|ƒ|jƒ}|t_    t
j dd|gƒn|jtƒ|krGtj ƒ}xst d|jƒƒD]Y}    |j|    ƒ}
|
dksç|
jƒ rqçn|
jƒ|kr3qçnt|
dƒqçWn|jtjdƒ} tjddƒ} | t| ƒkrä|| | kräd} t
j|ƒ}tjdƒ}x^| | D]R}||kr¿| j|ƒd}ttjd|||ƒƒ}| |7} q¿q¿Wtjd| || f|ƒt
j
|ƒj| ƒ|jt |ƒ}|jt!|ƒ}|tj"|}|| }|tj"}|tj"}|jt ||ƒ|jt!||ƒt
j#|tj|ƒn|S(    NitAncientBattlefield_9RœitElderBattlefieldExpisElderBattlefieldExp%ss&curStage=%s,updStage=%s,addTotalExp=%s($R*RRR-R;RRtGetNameRyRzR0RxR¹trangeR¢RºR»R¼RGRÂR R:R`RaRUtGetPlayerReExptindextevaltFormulaControltGetCompileFormulaRtAddExpR<R=tDef_PerPointValueR9(RRItaddValueRHt    gameWorldtupdScoreRttopNameR½R–tplayerRÖtstageScoreListt addTotalExptreExptexpFormulaDicttscoretupdStagetaddExptexptexpPointttotalExpt updTotalExptupdExpt updExpPoint((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyt __AddElderBattlefieldPlayerScore¥sT         "  
  c Cs€tjƒ}|jƒ}|jƒ}|jt|ƒ}tjddƒ}t|j    t
j dƒdt |ƒƒ}|jt |ƒ}|jt|ƒ}    i|tj6|tj6|tj6|    tj6}
|jtƒ} |jt| ƒ} | rötjnd|
d<| r | nd|
d<| |
d<tjƒj|tƒ|
d    <tjj|iƒ|
tj<tjd
|
|ƒtj||
ƒdS( NRœiiitRðttopScoreRtenemyIDs DoFBHelp %s(RRRR*R-R;R`RaR£RÂR R:RUR<R=Rt
Help_scoret    Help_steptHelp_expt Help_expPointRRyRzR+RDRntg_fbRobotJobDictRŸt Help_robotJobRt Notify_FBHelp( RRRîRRHRöRòRÖRùRúthelpDictRR((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyRGàs(   (
cCs>|jƒtjddiƒjƒkr:t|||ƒndS(NR_i(tGetNPCIDR`RatvaluestDoFBOnKill_Player(tcurNPCRR((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytDoFBOnNPCKill_Playerûs'cCs§tjƒ}|jƒtjk}tjddƒ}d}|rØ|jƒ}tjd|ƒ|j    |t
ƒd}|j |t
|ƒ|dkr©t j |ddgƒn|j    |tƒd}    |j |t|    ƒtjddƒ}
tjddƒ} |    |krl|    | dkrlt|    || t|
ƒdƒ} t j|
| |jƒ|    gƒt j |d|    gƒn|    dkr‘t j |ddgƒntj|tjdƒtj|tjd|    gƒtjd    dƒ}nd} |jƒtjkr6|jƒ} |j    | tƒ}||kr||rKt jd
|jƒ|jƒ|gƒq|t jd |jƒ|jƒ|jƒ|gƒn|j | tdƒ|r6|j | t|ƒ| |j    |tƒkrüt j |d ƒ|j |tdƒ|tjd dƒ7}n| tjƒjtƒkr3|tjd dƒ7}q3q6n|r~t|||ƒ}tjd||    | |f|ƒt||ƒn|jƒtjkr£t||ƒnt S(NtElderBattlefieldSysiiR itAncientBattlefield_10iiRœtAncientBattlefield_7tAncientBattlefield_robottAncientBattlefield_8tElderBattlefieldPoints4»÷É±Íæ¼Ò: »÷ɱ=%s,Á¬É±=%s,tagPlayerID=%s,updScore=%s(!RR+tGetGameObjTypeR&t    gotPlayerR`RdR*RRDtFBPlayerDict_KillCntRlR0t
NotifyCodeRmR£RUtFBNotifyRäRÄtDoAddSuccessProgressRÆRÇRÈR RkRnRR-RRÿRGR(tatkobjtdefenderRRIt atkIsPlayertbaseCnttaddScoreRHtkillCntt contKillCntExt ckillSysListtperCnttsysIndext tagPlayerIDtdefContKillCntExRï((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyR sb   !    (1    cCs´tjƒ}|jƒ}|jƒtjddiƒjƒkr\t|||ƒt|ƒn|jƒ}tjddƒ}|j    |ƒ}|s“dSt
|||ƒt ||ƒdS(NR_iRœi( RR+R,R R`RaR R t __OnRobotDieRŸRÿRG(RRRRIRJtnpcidtkillNPCScoreDictR ((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytDoFB_Player_KillNPCNs  '   cCs8|jƒtjddiƒjƒkr4t|ƒndS(NR_i(R R`RaR R((tattackerRR((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytDoFB_Npc_KillNPC_s' cCsLtjƒjƒ}|tjkr8tj|j|ƒn|gtj|<dS(N(RRRRyRžRŒ(RR((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyR(ds
c    Cs¨|jƒ}tjddƒ}||kr.dStjdƒ}x!|D]}tj|||ƒqDWtj|ƒ}tj    ƒj
|ƒ}t j |||t |ddƒdS(NR^ii(R R`RdRaRbRcRORPRt GetGameDatatGetSkillBySkillIDt
SkillShellt__DoLogic_AddBuffRÊ(    RRRR)t    buffNPCIDRfRgt    addBuffIDtcurSkill((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnMoveTouchNPCms   cCst||ƒ S(N(tCanAttackPlayer(Rt curTagPlayer((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytCheckPlayersRelation_IsFriend„scCs t||ƒS(N(R6(RR7((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytDoCanAttackTeamerscCstjƒ}|jƒ}tS(N(RR+R,R(RR7RIRJ((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyR6–s  cCstS(N(R(((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnPlayerReborn£scCsbt|ƒ|jƒ}tjƒj|tƒ}|tjddƒkrJdSt||d|ƒdS(NR_ii(    t__SetPlayerRandomPosRkRR+RDRER`RdRF(Rt rebornPlaceRRHRM((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytOnResetFBRebornPlacePosªs
 cCs˜tjddƒ|d}tjƒj|ƒ}|sJtjd|ƒdS|jƒ}tjƒj|t    |ƒt
j |ƒ}t j ||||ƒdS(NR_iisÉϹŸ´»î¼Óbuff   ÕÒ²»µ½¼¼ÄÜ%s(R`RdRR.R/tLogRkR+RlREt SkillCommont GetBuffTypeRbt    DoAddBuff(RRMRRht    skillBuffRHtbuffType((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyRF´s cCs#tƒ\}}|j||ƒdS(N(R]tResetPos(RtposXtposY((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyR;ÁscCs0tjddiƒj|ƒ}|s(dS|tS(NRœii(R`RaRŸt Def_PlayerCnt(Rtcfg((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pytGetFBLineMaxPlayerCountÊs(JR RRR0R`R}RÌRÏR&RÆRÄRVRbRéRyRR0R>R?RAROttimeR;RRRRmR<R=RnRERRRåRGR¥R¤RsRvR{RRR!R#R$R)RNRSR]RiRjRoRƒRR€RRÊR RÿRGRR R+R-R(R5R8R9R6R:R=RFR;RI(((s|.\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\GameWorldLogic\FBProcess\GameLogic_ElderBattlefield.pyt<module>s†                                           
         )                             $    C     $    ;             H