Skip to content

Commit 1c17db9

Browse files
committed
MEA v1.42.1 r111
v1.42.1 Improved ME 6 Ignition IBX/CCK SKU distinction r111 CSME 11.7.4.3330_CON_H_D0_PRD_RGN CSME 11.7.4.3330_CON_LP_C0_NPDM_PRD_RGN CSSPS 04.00.03.068_HA_SKU3_PRD_REC CSSPS 04.00.03.068_HA_SKU3_PRD_OPR
1 parent 80e3d05 commit 1c17db9

File tree

4 files changed

+46
-29
lines changed

4 files changed

+46
-29
lines changed

Changelog DB.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
r111
2+
3+
CSME 11.7.4.3330_CON_H_D0_PRD_RGN
4+
CSME 11.7.4.3330_CON_LP_C0_NPDM_PRD_RGN
5+
CSSPS 04.00.03.068_HA_SKU3_PRD_REC
6+
CSSPS 04.00.03.068_HA_SKU3_PRD_OPR
7+
18
r110
29

310
CSME 11.21.50.1429_COR_H_B0-S0_PRD_RGN

Changelog MEA.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
v1.42.1 r111
2+
3+
Improved ME 6 Ignition IBX/CCK SKU distinction
4+
15
v1.42.0 r110
26

37
Added full support for CSME 12.0 firmware

MEA.dat

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
*** ME Analyzer Engine Firmware Repository Database ***
2-
*** Revision r110 (2018-01-09 , 14:44) ***
2+
*** Revision r111 (2018-01-25 , 20:06) ***
33

44
*** Converged Security Management Engine (CSME) ***
55

@@ -85,6 +85,8 @@
8585
11.7.0.1229_CON_LP_C0_NPDM_PRD_RGN_57C08CC466649A8AE423150EC7A68FB0D4E72DB5945AD4491AD3E4DD5750C99E
8686
11.7.0.1229_CON_LP_C0_YPDM_PRD_RGN_AC954E604A0339BBAC37F0E512C1F2F03EE6948F8E02B4893CC2E3B6A81B6218
8787

88+
11.7.4.3330_CON_H_D0_PRD_RGN_08155BA3F1D4F8374D3BE6698D3C284CAAF1AEAF4808A9B2ABD2299BC8B4BAA4
89+
11.7.4.3330_CON_LP_C0_NPDM_PRD_RGN_6220AFCF28F650F84C2248D01EA8B2F8D4B55678CF526C43A64237185EA8906E
8890
11.7.4.3314_CON_H_D0_PRE_RGN_FF102A2C8E6E574CDB1003B10F2B618F7D0A5B343E6F3406778E1CF5E14CA411
8991
11.7.4.3314_CON_LP_C0_NPDM_PRE_RGN_1D57C2F30B959F443351CE03273A5CBD211CE87F9C6B59630B2E64111F751ECD
9092
11.7.0.3290_CON_H_D0_PRE_RGN_3E8B0BFC3987E7D9420512FC8585D2B6E90632A64760DDA25B8055663FE6BD06
@@ -892,8 +894,8 @@
892894
6.1.1.1045_5MB_DT_PRD_UPD_51E2B3A25E558B6B33620208730C91B31AAE6390A447BD9EF3AFD5CE3DB2305E
893895
6.1.0.1042_5MB_DT_PRD_UPD_0D19F985F4E2058D6A1DCF11EF7854C714F46672CAC7D50B8CD2BCA53AF23CDE
894896
6.1.0.1042_5MB_MB_PRD_UPD_43C314141C9532775325B96E4A51FC5EB256C9A6862A7093EA27361B8252EDAB
895-
6.0.50.1252_IGN_CC_PRD_RGN_1B66EC4CE92961D33CC22F57AFC8A0891F9BDF43E44D99AFD4BD44E54032AB0A
896-
6.0.50.1244_IGN_CC_PRD_RGN_754A25788C0F5C1E1B49AA1A0F26358B59D8C09DD56D7C8306FF5F3EDE33DD36
897+
6.0.50.1252_IGN_CCK_PRD_RGN_1B66EC4CE92961D33CC22F57AFC8A0891F9BDF43E44D99AFD4BD44E54032AB0A
898+
6.0.50.1244_IGN_CCK_PRD_RGN_754A25788C0F5C1E1B49AA1A0F26358B59D8C09DD56D7C8306FF5F3EDE33DD36
897899
6.0.41.1216_5MB_MB_PRD_UPD_690523C74250DABBCDA30D0DC76A6D265F6A3E17F7F72B21334137C3F7B1F206
898900
6.0.40.1215_5MB_DT_PRD_UPD_243BD947E253145DA254FAB5C2B7FB98D0A4C00FB43AC7920BDFC894264304F3
899901
6.0.40.1215_1.5MB_PRD_UPD_BA6B23FD4271D03D5B91F3402FE528BB37A0703821A525B747D262FB1089C20A
@@ -903,9 +905,9 @@
903905
6.0.30.1203_5MB_MB_PRD_UPD_871BCBB3CF1CC37B623E650CC6DC8F80949604E2863C82559723B8814C22FEC6
904906
6.0.30.1203_5MB_DT_PRD_UPD_BB8C3FCE0F9A0623CED12370F1004A2646D95D3572246712B647C600D99E906E
905907
6.0.30.1203_1.5MB_PRD_UPD_375F57077AE66CCD5F9146285FAEAA216640F25F0D25748F07DE3E33324E96F1
906-
6.0.30.1199_IGN_IP_PRD_RGN_8EC16A7082E30EFBA1D93AA410C796EAF26C2289E8DEFC02DCF274BCDE64E3EE
907-
6.0.21.1188_IGN_IP_PRD_RGN_96CC22763ACE2A0ACA3B1A219709A172D76FFB037D4C299C94DEDD7DB8A76F42
908-
6.0.20.1185_IGN_IP_PRD_RGN_50369663D1EDC287DB5E4DA57593C0DF2122CBF00D60A157288B14C7011C7C88
908+
6.0.30.1199_IGN_IBX_PRD_RGN_8EC16A7082E30EFBA1D93AA410C796EAF26C2289E8DEFC02DCF274BCDE64E3EE
909+
6.0.21.1188_IGN_IBX_PRD_RGN_96CC22763ACE2A0ACA3B1A219709A172D76FFB037D4C299C94DEDD7DB8A76F42
910+
6.0.20.1185_IGN_IBX_PRD_RGN_50369663D1EDC287DB5E4DA57593C0DF2122CBF00D60A157288B14C7011C7C88
909911
6.0.4.1205_5MB_MB_PRD_UPD_2DEAD3584AE041D63C2A182829384F718FBD80C514B1D6C14D5557688EEAF046
910912
6.0.3.1195_1.5MB_PRD_UPD_4DC1E8B84A469A337A4DBC6B7206BAD4595E23F725C15803DB81262C03EA3926
911913
6.0.3.1219_5MB_MB_PRD_UPD_7C48898ECB47675F683A34512D4E7C0498ED6E47AF1E780DAE64FA19E3D82D03
@@ -916,7 +918,7 @@
916918
6.0.0.1184_5MB_MB_PRD_UPD_1AF0FE0D715EB5D196FFB6C0D51AE27C2833F2DB954D7AC4455A2239066A41E4
917919
6.0.0.1184_5MB_DT_PRD_UPD_87343101009AA36CFB5594F209CAFF548BE4095EE67D0D352D0CB6C0B93EAE57
918920
6.0.0.1184_1.5MB_PRD_UPD_F2A194359747E83885BB8AC1D5D6CA55E13D7539F88E0DDC62555C1738FFDBB2
919-
6.0.0.1126_IGN_IP_PRD_RGN_EA29B3598AF906A6BDFD9413436E0106B5213D726932566F5C0E2683F6E6B611
921+
6.0.0.1126_IGN_IBX_PRD_RGN_EA29B3598AF906A6BDFD9413436E0106B5213D726932566F5C0E2683F6E6B611
920922

921923
6.2.61.3535_5MB_DT_PRD_EXTR_060A3D53080B12CBB25D7248D364E25EE0AF09247880B098CE7E1FB900C71677
922924
6.2.61.3535_5MB_DT_PRE_UPD_D89341E27E5EBBED0CDDD3AA70B3267DAF7D0AD6496FC06352C60073D45CD2F6
@@ -938,8 +940,8 @@
938940
6.1.0.1042_5MB_MB_PRD_EXTR_43C314141C9532775325B96E4A51FC5EB256C9A6862A7093EA27361B8252EDAB
939941
6.1.0.1042_5MB_DT_PRD_EXTR_0D19F985F4E2058D6A1DCF11EF7854C714F46672CAC7D50B8CD2BCA53AF23CDE
940942
6.1.0.1038_5MB_MB_PRD_EXTR_77437C7AFEB92DD50A3E791F1CAF54ED03ED75FF5EEC12ACF785BA8A0D5052AD
941-
6.0.50.1252_IGN_CC_PRE_RGN_77789024AFB2738A1F909BA1D0DE23D6102B410F62172722CE9AFD111E41CC24
942-
6.0.50.1244_IGN_CC_PRE_RGN_B65EDB9E5F985045A3C1278BD1CDC759979150076003AEAF16377E894E312E27
943+
6.0.50.1252_IGN_CCK_PRE_RGN_77789024AFB2738A1F909BA1D0DE23D6102B410F62172722CE9AFD111E41CC24
944+
6.0.50.1244_IGN_CCK_PRE_RGN_B65EDB9E5F985045A3C1278BD1CDC759979150076003AEAF16377E894E312E27
943945
6.0.42.1221_1.5MB_PRD_EXTR_2F50736D5538265507B7DB5E6DCE445A055285D1AEBAB29DB92E76B68D9BE0F5
944946
6.0.40.1215_5MB_MB_PRD_EXTR_911B4007B977475DB3B4C001306B7D6D8011A8C044A62AD8C752A054F175BFF7
945947
6.0.40.1215_5MB_DT_PRD_EXTR_243BD947E253145DA254FAB5C2B7FB98D0A4C00FB43AC7920BDFC894264304F3
@@ -950,7 +952,7 @@
950952
6.0.30.1203_1.5MB_PRD_RGN_375F57077AE66CCD5F9146285FAEAA216640F25F0D25748F07DE3E33324E96F1
951953
6.0.30.1203_5MB_MB_PRD_RGN_871BCBB3CF1CC37B623E650CC6DC8F80949604E2863C82559723B8814C22FEC6
952954
6.0.30.1203_5MB_DT_PRD_RGN_BB8C3FCE0F9A0623CED12370F1004A2646D95D3572246712B647C600D99E906E
953-
6.0.20.1185_IGN_IP_PRE_RGN_8D1A08A62D9F5C3EEC664DB5E5BFD944988EEB8B864A1DD6A52B8C2D31A46E89
955+
6.0.20.1185_IGN_IBX_PRE_RGN_8D1A08A62D9F5C3EEC664DB5E5BFD944988EEB8B864A1DD6A52B8C2D31A46E89
954956
6.0.3.1195_5MB_DT_PRD_EXTR_E7A521523C32653E5AE92B7A07BE3E798A26217A84929A5D68F0F1036432F7AC
955957
6.0.3.1195_5MB_MB_PRD_EXTR_769F1D19D24C672259401193F244D678369232A57B6B3B7E5423E3D59F3EF4B0
956958
6.0.3.7143_5MB_MB_PRE_UPD_D5B4D709CD52F56ED0774B439593224CCAD5E0A1B321C638D332ED37D705A665
@@ -961,13 +963,13 @@
961963
6.0.0.1184_5MB_MB_PRD_RGN_1AF0FE0D715EB5D196FFB6C0D51AE27C2833F2DB954D7AC4455A2239066A41E4
962964
6.0.0.1184_5MB_DT_PRD_RGN_87343101009AA36CFB5594F209CAFF548BE4095EE67D0D352D0CB6C0B93EAE57
963965
6.0.0.1184_1.5MB_PRD_RGN_F2A194359747E83885BB8AC1D5D6CA55E13D7539F88E0DDC62555C1738FFDBB2
964-
6.0.0.1126_IGN_IP_PRE_RGN_DDA8399FC5FEBC6A5A18374C8644BE6947F4F544BA6DA5E63849F7AC31A9BEEE
966+
6.0.0.1126_IGN_IBX_PRE_RGN_DDA8399FC5FEBC6A5A18374C8644BE6947F4F544BA6DA5E63849F7AC31A9BEEE
965967
6.0.0.1115_5MB_MB_PRE_UPD_D2391279EA029F1BB4F62E584395BC58F211FF4AEACBF70705FEEA347C3FAF57
966968
6.0.0.1115_5MB_MB_PRE_RGN_D2391279EA029F1BB4F62E584395BC58F211FF4AEACBF70705FEEA347C3FAF57
967969
6.0.0.1115_5MB_DT_PRE_UPD_D9C871893EE0660EE5B91253D83DF50AD63D959AB374E7A361262BF53D9681AE
968970
6.0.0.1115_5MB_DT_PRE_RGN_D9C871893EE0660EE5B91253D83DF50AD63D959AB374E7A361262BF53D9681AE
969-
6.0.0.1040_IGN_IP_BYP_RGN_6D99412F56146F9389FDC83577EEB293E693295F284A07F81E27377389F5D69B
970-
6.0.0.1008_IGN_IP_BYP_RGN_7D2DB92A790986F2D1E358E9EA9258FA61038A538F4A94B2FF8A947BCEE064DB
971+
6.0.0.1040_IGN_IBX_BYP_RGN_6D99412F56146F9389FDC83577EEB293E693295F284A07F81E27377389F5D69B
972+
6.0.0.1008_IGN_IBX_BYP_RGN_7D2DB92A790986F2D1E358E9EA9258FA61038A538F4A94B2FF8A947BCEE064DB
971973

972974
5.2.71.1048_DO_PRD_UPD_6991C8D65AA0319D6F6044FFBAA36BFF1C8778070E15E52BA486B2E09BE051F5
973975
5.2.70.1046_DO_PRD_UPD_8E3CA604FA42C39FEAD4BD2CE92FAF7A5C0B6CD46E7800FDCEE9BDA6AEBF6C24
@@ -1393,6 +1395,8 @@
13931395
04.00.03.075_XX_SKU2_PRD_OPR_35EBD679316AF51C5DFBD01F6AEE881B017339B15B17D65909B84BB8B802CD69
13941396
04.00.03.075_HA_SKU3_PRD_REC_693D93097BEFD56DA904A39633489AA9925DECB3AC84FF5EA8B7480799B9BC1F
13951397
04.00.03.075_HA_SKU3_PRD_OPR_72C0E768652A2B126DDC40248F3BDDDD84E5C39807B50CC7F32CE215BF354DE5
1398+
04.00.03.068_HA_SKU3_PRD_REC_3BD854ABBAE58A21C56EC5151748FFE086553AF7654DF34DA7194DF19C00011F
1399+
04.00.03.068_HA_SKU3_PRD_OPR_A70B15554C62A3DE0BD87D5F1D28EC1143D8FDD65E053C1A49BD4D9C484C77A4
13961400
04.00.03.068_XX_SKU2_PRD_REC_29E2E834858E32347F3814CD747D999D825B165E13723E50C311CC990527B245
13971401
04.00.03.068_XX_SKU2_PRD_OPR_CE9AC57F083F900972970DAA99A3B6826510DCD94C07EF4A5BF5329FF39FEAD9
13981402
04.00.03.065_HA_SKU3_PRD_REC_547473C3D3F806B88EBD829BDB5837D2CABF4C728C3B732717E000FD16D88B5B
@@ -1430,6 +1434,7 @@
14301434
04.00.03.078_XX_SKU2_PRD_EXTR_7CABED295DF1EE637FB7239A1C69AD4EDE96DF0B5B6AFB7CF15ABCFECB3771E8
14311435
04.00.03.075_XX_SKU2_PRD_EXTR_35EBD679316AF51C5DFBD01F6AEE881B017339B15B17D65909B84BB8B802CD69
14321436
04.00.03.075_HA_SKU3_PRD_EXTR_72C0E768652A2B126DDC40248F3BDDDD84E5C39807B50CC7F32CE215BF354DE5
1437+
04.00.03.068_HA_SKU3_PRD_EXTR_A70B15554C62A3DE0BD87D5F1D28EC1143D8FDD65E053C1A49BD4D9C484C77A4
14331438
04.00.03.068_XX_SKU2_PRD_EXTR_CE9AC57F083F900972970DAA99A3B6826510DCD94C07EF4A5BF5329FF39FEAD9
14341439
04.00.03.065_HA_SKU3_PRD_EXTR_2ECE13B7FFA876A1302AE0B892A43E3951A6211730EA41648CF0AC91674F3C7C
14351440
04.00.03.061_XX_SKU2_PRD_EXTR_C1B0AC9DDED07D1BB2D302FF0E786E4360FF69498E73F5AA1A98FCA33C840056
@@ -1720,7 +1725,7 @@ RSAPKEY_ME_D247545E4702D1783CEFBBE200BC36E702674BC226B853E4DEC7E06DCA81273C (2.5
17201725
RSAPKEY_ME_D23BCB9B4315589FEFC1F414389FEB04F57DC5FDDABB48E622483691C924998E (2.0-2.2 PRD)
17211726

17221727
RSAPKEY_CSTXE_ED0274FA0CB016E561DFE8E5AEC8A8E4822DA4836AE3391D7FD4E30EAC3CEA1F (4 PRD)
1723-
RSAPKEY_CSTXE_3D6CF8E7C8C468FC18249E373EA5AABBDB3DA9F1354A8021FBE0EEB31AAD07E4 (3.2-3.3 PRD)
1728+
RSAPKEY_CSTXE_3D6CF8E7C8C468FC18249E373EA5AABBDB3DA9F1354A8021FBE0EEB31AAD07E4 (3.2 PRD)
17241729
RSAPKEY_CSTXE_10C05A23A5A2DEBCE1453D615CC62A9BC47FBEC2259E7D0A415A7FD229EBB37B (3.0-3.1 PRD)
17251730
RSAPKEY_TXE_46E378312F389AF5442A7B3E775F3078E8D0AA511F25C1B3B105E28C09CD68AB (2 PRD)
17261731
RSAPKEY_TXE_613421A156443F1C038DDE342FF6564513A1818E8CC23B0E1D7D7FB0612E04AC (0-1 IT PRD)
@@ -1772,8 +1777,8 @@ Latest_ME_7_SLM__7.0.1.1205
17721777
Latest_ME_6_1.5MB__6.2.50.1062
17731778
Latest_ME_6_5MB_DT__6.2.61.3535
17741779
Latest_ME_6_5MB_MB__6.2.61.3535
1775-
Latest_ME_6_IGN_IP__6.0.30.1199
1776-
Latest_ME_6_IGN_CC__6.0.50.1252
1780+
Latest_ME_6_IGN_IBX__6.0.30.1199
1781+
Latest_ME_6_IGN_CCK__6.0.50.1252
17771782
Latest_ME_5_DO__5.2.71.1048
17781783
Latest_ME_5_BC__5.2.0.1002
17791784
Latest_ME_5_DHBC__5.0.0.1081

MEA.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
Copyright (C) 2014-2018 Plato Mavropoulos
77
"""
88

9-
title = 'ME Analyzer v1.42.0'
9+
title = 'ME Analyzer v1.42.1'
1010

1111
import os
1212
import re
@@ -848,8 +848,8 @@ def ext_print(self) :
848848
pt.add_row(['Removable', fvalue[f2]])
849849
pt.add_row(['Init Immediately', fvalue[f3]])
850850
pt.add_row(['Restart Policy', ['Not Allowed','Immediately','On Next Boot'][f4]])
851-
pt.add_row(['CM0 UMA', fvalue[f5]])
852-
pt.add_row(['CM0 No UMA', fvalue[f6]])
851+
pt.add_row(['CM0 with UMA', fvalue[f5]])
852+
pt.add_row(['CM0 without UMA', fvalue[f6]])
853853
pt.add_row(['CM3', fvalue[f7]])
854854
pt.add_row(['Init Flow Reserved', '0x%X' % f8])
855855
pt.add_row(['Normal', fvalue[f9]])
@@ -898,8 +898,8 @@ def ext_print(self) :
898898
pt.add_row(['Removable', fvalue[f2]])
899899
pt.add_row(['Init Immediately', fvalue[f3]])
900900
pt.add_row(['Restart Policy', ['Not Allowed','Immediately','On Next Boot'][f4]])
901-
pt.add_row(['CM0 UMA', fvalue[f5]])
902-
pt.add_row(['CM0 No UMA', fvalue[f6]])
901+
pt.add_row(['CM0 with UMA', fvalue[f5]])
902+
pt.add_row(['CM0 without UMA', fvalue[f6]])
903903
pt.add_row(['CM3', fvalue[f7]])
904904
pt.add_row(['Init Flow Reserved', '0x%X' % f8])
905905
pt.add_row(['Normal', fvalue[f9]])
@@ -2716,7 +2716,7 @@ class BPDT_Entry_GetFlags(ctypes.Union):
27162716
# Names from $MN2 Manifest
27172717
bpdt_dict = {
27182718
0 : 'SMIP', # OEM-SMIP
2719-
1 : 'RBEP', # CSE-RBE
2719+
1 : 'RBEP', # ROM Boot Extensions Partition (CSE-RBE)
27202720
2 : 'FTPR', # CSE-BUP
27212721
3 : 'UCOD', # UCODE
27222722
4 : 'IBBP', # IBB
@@ -6203,12 +6203,13 @@ def mass_scan(f_path) :
62036203
sku_bits = {3: 'Standard Manageability', 4: 'AMT', 6: 'QST', 8: 'Local Wakeup Timer', 9: 'KVM', 10: 'Anti-Theft', 15: 'Remote PC Assist'}
62046204

62056205
if sku_me == '00000000' : # Ignition (128KB, 2MB)
6206-
sku = 'Ignition'
6207-
if hotfix != 50 : # P55, PM55, 34xx (Ibex Peak)
6208-
sku_db = 'IGN_IP'
6209-
elif hotfix == 50 : # 89xx (Cave/Coleto Creek)
6210-
sku_db = 'IGN_CC'
6206+
if hotfix == 50 : # 89xx (Cave/Coleto Creek)
6207+
ign_pch = 'CCK'
62116208
platform = 'Cave/Coleto Creek'
6209+
else : # P55, PM55, 34xx (Ibex Peak)
6210+
ign_pch = 'IBX'
6211+
sku_db = 'IGN_' + ign_pch
6212+
sku = 'Ignition ' + ign_pch
62126213
elif sku_me == '701C0000' : # Home IT (1.5MB, 4MB)
62136214
sku = '1.5MB'
62146215
sku_db = '1.5MB'
@@ -6228,7 +6229,7 @@ def mass_scan(f_path) :
62286229
if minor < db_min or (minor == db_min and (hotfix < db_hot or (hotfix == db_hot and build < db_bld))) : upd_found = True
62296230

62306231
# ME6-Only Fix 1 : ME6 Ignition does not work with KRND
6231-
if sku == 'Ignition' and rgn_exist :
6232+
if 'Ignition' in sku and rgn_exist :
62326233
ign_pat = (re.compile(br'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6D\x3C\x75\x6D')).findall(reading) # Clean $MINIFAD checksum
62336234
if len(ign_pat) < 2 : fw_type = "Region, Extracted" # 2 before NFTP & IGRT
62346235
else : fw_type = "Region, Stock"
@@ -6710,7 +6711,7 @@ def mass_scan(f_path) :
67106711
fw_in_db_found = 'Yes'
67116712
# Only for ME8+ or ME7 non-PRD or ME6.0 IGN
67126713
if type_db == 'UPD' and ((variant in ['ME','CSME'] and (major > 7 or (major == 7 and release != 'Production') or
6713-
(major == 6 and sku == 'Ignition'))) or variant in ['TXE','CSTXE']) and (name_db_rgn in line or name_db_extr in line) :
6714+
(major == 6 and 'Ignition' in sku))) or variant in ['TXE','CSTXE']) and (name_db_rgn in line or name_db_extr in line) :
67146715
rgn_over_extr_found = True # Same RGN/EXTR firmware found at database, UPD disregarded
67156716
# noinspection PyUnboundLocalVariable
67166717
if type_db in ['REC','OPR'] and name_db_extr in line :

0 commit comments

Comments
 (0)