
    di              
          d Z ddlZddlmZmZ ddlmZ ddlmZ	 ddlT ddl
T ddlT ddlT ddlmZmZmZmZmZmZmZ ddlmZ dd	lmZmZ ddlT dd
lmZmZmZmZ ddlm Z  i ddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-i d.d/d0d1d2dd3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNi dOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdyZ! G dz d{e"          Z# G d| d}e$          Z% G d~ de$          Z& G d de$          Z' G d de$          Z( G d de)          Z* G d de$          Z+ G d de$          Z, G d de$          Z- G d de.          Z/ G d de0          Z1 G d de)          Z2 G d de0          Z3 G d de)          Z4 G d de)          Z5 G d de)          Z6 G d de0          Z7 G d de)          Z8 G d de)          Z9 G d de)          Z: G d de0          Z; G d de)          Z< G d de)          Z= G d de)          Z> G d de7          Z? G d de0          Z@ G d de0          ZA G d de)          ZB G d de0          ZC G d de$          ZD G d de)          ZE G d de)          ZF G d de0          ZG G d de0          ZH G d de)          ZI G d de$          ZJ G d de$          ZK G dĄ de$          ZL G dƄ de$          ZM G dȄ de$          ZN G dʄ de)          ZO G d̄ de$          ZP G d΄ deQdЬѦ          ZR G d҄ de)          ZS G dԄ de$          ZT G dք de)          ZU G d؄ de)          ZV G dڄ de0          ZW G d܄ de.          ZX G dބ de          ZY G d de          ZZdS )a   Various constants from ETSI TS 151.011 +
Representation of the GSM SIM/USIM/ISIM filesystem hierarchy.

The File (and its derived classes) uses the classes of pySim.filesystem in
order to describe the files specified in the relevant ETSI + 3GPP specifications.
    N)packunpack)Tuple)Optional)*)	dec_iccid	enc_icciddec_imsienc_imsidec_plmnenc_plmndec_xplmn_w_act)bytes_for_nibbles)CardProfileCardProfileAddon)DF_PHONEBOOKDF_MULTIMEDIADF_MCSDF_V2X)	AddonGSMR   zCHV1 disable function   z"Abbreviated Dialling Numbers (ADN)   zFixed Dialling Numbers (FDN)   zShort Message Storage (SMS)   zAdvice of Charge (AoC)   z)Capability Configuration Parameters (CCP)   PLMN selector   RFU	   MSISDN
   
Extension1   
Extension2   zSMS Parameters   zLast Number Dialled (LND)   z!Cell Broadcast Message Identifier   Group Identifier Level 1   Group Identifier Level 2   Service Provider Name   zService Dialling Numbers (SDN)   
Extension3      z/VGCS Group Identifier List (EFVGCS and EFVGCSS)   z,VBS Group Identifier List (EFVBS and EFVBSS)   z7enhanced Multi-Level Precedence and Pre-emption Service   zAutomatic Answer for eMLPP   zData download via SMS-CB   zData download via SMS-PP   zMenu selection   zCall control   zProactive SIM   z(Cell Broadcast Message Identifier Ranges   zBarred Dialling Numbers (BDN)    
Extension4!   zDe-personalization Control Keys"   Co-operative Network List#   zShort Message Status Reports$   z*Network's indication of alerting in the MS%   z.Mobile Originated Short Message control by SIM&   GPRS'   zImage (IMG)(   z%SoLSA (Support of Local Service Area))   z1USSD string data object supported in Call Control*   zRUN AT COMMAND command+   4User controlled PLMN Selector with Access Technology,   8Operator controlled PLMN Selector with Access Technology-   %HPLMN Selector with Access Technology.   CPBCCH Information/   zInvestigation Scan0   ,Extended Capability Configuration Parameters1   MExE2   zReserved and shall be ignored3   PLMN Network NameOperator PLMN ListMailbox Dialling Numbers!Message Waiting Indication Status!Call Forwarding Indication Status$Service Provider Display Informationz"Multimedia Messaging Service (MMS)zExtension 8 MMS User Connectivity Parameters)4   5   6   7   8   9   :   ;   c                       e Zd ZdZd Zd ZdS )ExtendedBcdAdapterz7Replace some hex-characters with other ASCII charactersc                     t          |t                    s|S |                                                    dd                              dd          S )Nar   b#)
isinstancestrlowerreplaceselfobjcontextpaths       =/home/jenkins/workspace/simtester-sanitize/pySim/ts_51_011.py_decodezExtendedBcdAdapter._decode{   sG    #s## 	Jyy{{""3s++33C<<<    c                     t          |t                    s|S |                    dd                              dd          S )Nr   rn   rp   ro   )rq   rr   rt   ru   s       rz   _encodezExtendedBcdAdapter._encode   s=    #s## 	J{{3s##++C444r|   N)__name__
__module____qualname____doc__r{   r~    r|   rz   rl   rl   w   s8        AA= = =
5 5 5 5 5r|   rl   c            	       `     e Zd Zddddddddd	d	d
fddddddddd	d	d
fgZdZd fd	Z xZS )EF_ADN<42204841203120536963FFFFFFFFFFFF06810628560810FFFFFFFFFFFFFFz
B HA 1 Sicr   Tunknown	isdn_e164exttype_of_numbernumbering_plan_id
6082658001   )alpha_id
len_of_bcdton_npi
dialing_nrcap_conf_idext1_record_id<4B756E64656E626574726575756E67FF0791947112122721ffffffffffffKundenbetreuungr   international4917212172126f3aNEF.ADNAbbreviated Dialing Numbersr   c                     t                      j        |f|||dd| d|z  }t          dt          t	          t          t          t          j        j	        dz
                                          z  dt          z  dt          z  dt          t          t          t          d	                                        z  d
t          z  |t          z            | _        d S )N)r)   r=   sfidnamedescrec_lenext%u_record_idr   r)   r   r   r   r#   r   )super__init__Struct	COptionalGsmOrUcs2AdapterRpadBytesthis_	total_lenInt8ubTonNpirl   PaddedBcdAdapter
_construct	rv   fidr   r   r   r   kwargsext_name	__class__s	           rz   r   zEF_ADN.__init__   s    Z4dxZZSYZZZ$s* I6FtERVRXRbceReLfLfGgGg6h6h,i,i!i!-f!4!*6!1!-.@AQRVW\]_W`W`RaRaAbAb.c.c!c!.v!5!)&2 2r|   )r   Nr   r   r   r   r   r   _test_de_encode_test_no_padr   __classcell__r   s   @rz   r   r      s        L(tGPGRGU GU C3I IJ
 M,ARVKZ`kKm Km ,CSVX XZ
O L2 2 2 2 2 2 2 2 2 2r|   r   c                   &     e Zd Zd fd	Zd Z xZS )EF_SMS6f3cNEF.SMSShort messagesc                 F     t                      j        |f|||dd| d S )N)   r   r   r   r   rv   r   r   r   r   r   r   s         rz   r   zEF_SMS.__init__   s4    \4dz\\U[\\\\\r|   c                 |    d } ||d                   }|dd          }|d         |d         t          |          dS )Nc                     | dz  dk    rdS | dz  dk    rdS | dz  dk    rdS | dz  dk    rdS | d	z  d
k    rdS | d	z  dk    rdS | d	z  dk    rdS | d	z  dk    rdS dS )Nr   r   )N
free_spacer   )mtmessage_readr   )r   message_to_be_read)momessage_to_be_sentr>   r   )r   sent_status_not_requestedr(   )r    sent_status_req_but_not_receivedr4   )r   "sent_status_req_rx_not_stored_smsrr<   )r   sent_status_req_rx_stored_smsr)Nrfur   )statuss    rz   decode_statusz0EF_SMS._decode_record_bin.<locals>.decode_status   s    }$$++$$&&--$$&&33$$&&33$$&&::$$&&AA$$&&CC$$&&??$}r|   r   r   )	directionr   	remainderb2h)rv   raw_bin_datar   r   r   r   s         rz   _decode_record_binzEF_SMS._decode_record_bin   sR    	% 	% 	%( |A// $	#AY&)#i..YYYr|   )r   Nr   r   )r   r   r   r   r   r   r   s   @rz   r   r      sY        ] ] ] ] ] ]Z Z Z Z Z Z Zr|   r   c            	            e Zd Zddddddddd	fd
dddddddd	fgZddg difdddifgZdZd fd	Zddededede	f fdZ
 xZS ) 	EF_MSISDNDffffffffffffffffffffffffffffffffffffffff04b12143f5ffffffffffffffffff r   Tnetwork_specificr   r   12345r   r   r   r   D456967656e65205275666e756d6d6572ffffffff0891947172199181f3ffffffffffzEigene Rufnummerr   r   4917279119183Dffffffffffffffffffffffffffffffffffffffff05b1716662f6ffffffffffffffffmsisdn)r   r   1766266Dffffffffffffffffffffffffffffffffffffffff06b121436587f9ffffffffffffff	1234567896f40N	EF.MSISDNr"   c                     t                      j        |f|||ddd| t          dt          t	          t          t          t          j        j	        dz
                                          z  dt          z  dt          z  dt          t          t          t          d	                                        z  t          d
d                    | _        d S )N)r*   rB   T)r   r   r   r   leftpadr   r)   r   r   r   r#   r      pattern)r   r   r   r   r   r   r   r   r   r   r   r   rl   r   Paddingr   r   s         rz   r   zEF_MSISDN.__init__   s    h4dxY]hhaghhh I6FtERVRXRbceReLfLfGgGg6h6h,i,i!i!-f!4!*6!1!-.@AQRVW\]_W`W`RaRaAbAb.c.c!c")!W"="="=	? ?r|   abstract_data	record_nrr   returnc                 p   d|v r|d         }t          |          t          k    rd}d}|t          |          dz  dz  z   }n4|d         }|d         }|d         t          |d                   dz  dz  z   }dt          |          dz  dz   d	||d
|d}t                                          |||          S )Nr   r   r   r   fr   r   r   Tr   r   )typerr   lenr   encode_record_hex)	rv   r   r   r   r   npitonr   r   s	           rz   r   zEF_MSISDN.encode_record_hex   s    }$$"8,FF||s""!(#c&kkAo&;;

QiQi#AYVAY!);c)AA
*,,/
OOq,@1,D26=@@C*E *E -78 8M ww((	9MMMr|   )r   Nr   r"   N)r   r   r   r   _test_encoder   r   dictintrr   r   r   r   s   @rz   r   r      s.       
P1YkOZ:\ :\"$ $	% Q+1QUix_jJl Jl*, ,	-	O Q)))*	,
P{#	%L L? ? ? ? ? ?N Nt N NPS N_b N N N N N N N N N Nr|   r   c            
            e Zd Zdddddddddddddd	d
ddddddd
ddddfdddddddddddddd	d
dddddd	d
ddddfgZdZ G d de          Zed             Zd fd	Z	 xZ
S )EF_SMSPX534d5343ffffffffffffffffffffffffe1ffffffffffffffffffffffff0891945197109099f9ffffff0000a9SMSCFT)tp_dest_addr
tp_sc_addrtp_pidtp_dcstp_vpr   reserved_for_extensionr   r   )lengthr   call_numberr   r   r   4915790109999    i  )r   parameter_indicatorsr  r  r  r  tp_vp_minutesX454e6574776f726b73fffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffff0000a7	ENetworks  c                       e Zd Zd Zd ZdS )EF_SMSP.ValidityPeriodAdapterc                     |dk    r|dz   S |dk    rd|dz
  dz  z   S |dk    r|dz
  dz  S |d	k    r|d
z
  dz  S t           )N   r        r=         r  r      `'  
ValueErrorru   s       rz   r{   z%EF_SMSP.ValidityPeriodAdapter._decode  sh    czzU{"39"233c	g..c	k22  r|   c                     |dk    r|dz  dz
  S |dk    rd|dz
  dz  z   S |dk    rd|dz  z   S |d	k    rd
|dz  z   S t           )Nr  r   r   r  r  r=   i  r  i	 r  r  r  ru   s       rz   r~   z%EF_SMSP.ValidityPeriodAdapter._encode  ss    e||ax!|#sg2566$$cg.//(((ck233  r|   Nr   r   r   r{   r~   r   r|   rz   ValidityPeriodAdapterr  
  s2        
	! 
	! 
	!
	! 
	! 
	! 
	! 
	!r|   r  c                     t          | d          rt          | j                  dk    rdS t          t          | j                            dz   S )zNCompute the length field for an address field (like TP-DestAddr or TP-ScAddr).r  r   r   r   )hasattrr   r  r   ctxs    rz   sc_addr_lenzEF_SMSP.sc_addr_len"  sL     sM** 	?c#/.B.Ba.G.G4$S%9%9::Q>>r|   6f42NEF.SMSP Short message service parametersc                     t                      j        |f|||dd| t          dt          t          d           z  dt
          z  dt          t          t          d                              z            }t          dt          t          t          t          t          j        j        d	z
                                          z  d
t          t          t!          dt#          d                    dt$          z  dt$          z  dt$          z  dt$          z  dt$          z                      z  d|z  d|z  dt          d          z  dt          d          z  dt&                              t*                    z            | _        d S )N)r;   Nr   r  c                 6    t                               |           S r   )r   r#  r!  s    rz   <lambda>z"EF_SMSP.__init__.<locals>.<lambda>,  s    W=P=PQT=U=U r|   r   r  r#   r   r;   r  r   r   r  r  r  r  r  r   r  )r   r   r   Rebuildr   r   r   r   r   r   r   r   r   r   InvertAdapter	BitStructConstBitsIntegerFlagr   r  Byter   )rv   r   r   r   r   r   ScAddrr   s          rz   r   zEF_SMSP.__init__*  sq   \4dz\\U[\\\1U1U!V!VV!&(-8HeTVii8Y8Y*Y[ [ I6FtERVRXRbceReLfLfGgGg6h6h,i,i!i!7iHMaQ\]^Q_Q_H`H`HOPTHPQUHPQUHTUYHYHVW[H[G] G] 9^ 9^ "^ "0!6!-f!4!)%((!2!)%((!2!01N1Nt1T1T!TV Vr|   )r$  Nr%  r&  )r   r   r   r   r   Adapterr  staticmethodr#  r   r   r   s   @rz   r   r      s       
d%_cDHTXcg9j 9j(+YqOg9j 9j-/2 2 '(TUdKV5Y 5Y+:= = 4J J		L e#udhIMY]hm>p >p(+YqOg9j 9j-/2 2 '*tWoMe7h 7h+-0 0 4J J		LO, L! ! ! ! ! ! ! !0 ? ? \?V V V V V V V V V Vr|   r   c                   <     e Zd Z G d de          Zd	 fd	Z xZS )
EF_SMSSc                       e Zd Zd Zd ZdS )EF_SMSS.MemCapAdapterc                     |dz  rdndS )Nr   FTr   ru   s       rz   r{   zEF_SMSS.MemCapAdapter._decode@  s    !G-55-r|   c                     |rdndS )Nr   r   r   ru   s       rz   r~   zEF_SMSS.MemCapAdapter._encodeC  s    ?11"r|   Nr  r   r|   rz   MemCapAdapterr7  ?  s2        	. 	. 	.	# 	# 	# 	# 	#r|   r:  6f43NEF.SMSS
SMS statusr   r   c                      t                      j        |f||||d| t          dt          z  d|                     t                    z            | _        d S )Nr   r   r   sizelast_used_tpmrmemory_capacity_exceeded)r   r   r   r   r:  r   rv   r   r   r   r   rA  r   r   s          rz   r   zEF_SMSS.__init__F  sc    S4dDSSFSSS V#%?@R@RSY@Z@Z%Z\ \r|   )r;  Nr<  r=  r>  )r   r   r   r2  r:  r   r   r   s   @rz   r5  r5  >  sq        # # # # # # # #\ \ \ \ \ \ \ \ \ \r|   r5  c                         e Zd Zd fd	Z xZS )EF_SMSR6f47NEF.SMSRSMS status reportsr=   r=   c                      t                      j        |f||||d| t          dt          z  dt	          d          z            | _        d S )Nr   sms_record_idsms_status_reportr<   r   r   r   r   r   r   rv   r   r   r   r   r   r   r   s          rz   r   zEF_SMSR.__init__M  s[    Y4dwYYRXYYY F"$7b		$AC Cr|   )rG  NrH  rI  rJ  r   r   r   r   r   r   s   @rz   rF  rF  L  sG        C C C C C C C C C Cr|   rF  c                         e Zd Zd fd	Z xZS )EF_EXTNEF.EXT	Extensionr(   r(   c           	           t                      j        d|||||d| t          dt          z  dt	          d          z  dt          z            | _        d S )N)r   r   r   r   r   record_typeextension_datar%   
identifierr   rN  rO  s          rz   r   zEF_EXT.__init__T  sb    ]St$T7]]V\]]] & "2599"<l6>QS Sr|   )NrS  rT  rU  rP  r   s   @rz   rR  rR  S  sG        S S S S S S S S S Sr|   rR  c                   $     e Zd Z	 	 d fd	Z xZS )EF_CMI6f58NEF.CMIr   r4   Comparison Method Informationc                      t                      j        |f||||d| t          dt          t	          t          t          j        j        dz
                                z  dt          z            | _
        d S )Nr   r   r   comparison_method_id)r   r   r   GsmStringAdapterr   r   r   r   r   r   r   rv   r   r   r   r   r   r   r   s          rz   r   zEF_CMI.__init__[  sy    Y4dwYYRXYYY 'U463CA3E-F-F(G(GHHHJ`agJgi ir|   )r\  Nr]  r^  r_  rP  r   s   @rz   r[  r[  Z  sM        EL5i i i i i i i i i ir|   r[  c                         e Zd Zd fd	Z xZS )
DF_TELECOM7f10
DF.TELECOMNc                     t                      j        d(|||d| t                      t          dddd          t                      t	          ddd	d
          t	          dddd          t                      t                      t                      t          dd ddd          t          dd ddd          t          dd dd          t          dd dd          t          dd d d!          t          d"d#d$          t          d%d d&d'          t                      t                      t                      t                      t                      t                      g}|                     |           d S ))Nr   r   r   6f3bzEF.FDNzFixed dialling numbersr   )r   r   r   r   6f3dzEF.CCPz#Capability Configuration Parametersr)   r)   )r   r   r   r   6f4fzEF.ECCPrW   )r*   r?   6f44zEF.LNDzLast Number Dialledr   )r   6f49zEF.SDNzService Dialling Numbersr   6f4azEF.EXT1zExtension1 (ADN/SSC)6f4bzEF.EXT2zExtension2 (FDN/SSC)6f4czEF.EXT3zExtension3 (SDN)6f4dzEF.BDNzBarred Dialling Numbers6f4ezEF.EXT4zExtension4 (BDN/SSC)r   )r   r   r   r   
LinFixedEFr   r   r5  rR  rF  r[  r   r   r   r   	add_files)rv   r   r   r   r   filesr   s         rz   r   zDF_TELECOM.__init__c  ss   ASt$AA&AAAHHvH3KQRSSSHH6A8U U U6	JT\^ ^ ^KKIIII64+@aHHH64+E1MMM64,BCC64,BCC64,>??vH3LMMM64,BCCIIHHNNOOHHHH1
4 	ur|   )rf  rg  NrP  r   s   @rz   re  re  b  s=                 r|   re  c                   6     e Zd ZdgZ	 	 d fd	Zd	 Zd
 Z xZS )EF_LP)24rz  6f05NEF.LPr   Nr   Language Preferencec                 V    t                                          ||||||           d S Nr   r   r   rA  r   r   )rv   r   r   r   rA  r   r   r   s          rz   r   zEF_LP.__init__  s/    4dDRYZZZZZr|   c                      t          |          S r   r   )rv   in_binr   s      rz   r   zEF_LP._decode_record_bin  s    6{{r|   c                      t          |          S r   )h2brv   in_jsonr   s      rz   _encode_record_binzEF_LP._encode_record_bin  s    7||r|   )r{  Nr|  r}  r   r~  r   r   r   r   r   r   r  r   r   s   @rz   ry  ry    su        
O UV+[ [ [ [ [ [        r|   ry  c                        e Zd ZdddifdddifgZd fd	Zd Zd Z ed           G d de                      Z	 xZ
S )EF_IMSI082982608200002080imsi2280628000002080829261011608457402620111064875046f07NEF.IMSIIMSIr!   r!   c                     t                                          |||||           | xj        |                     |           gz  c_        d S Nr@  )r   r   shell_commandsAddlShellCommandsrv   r   r   r   r   rA  r   s         rz   r   zEF_IMSI.__init__  sQ    4dDIII 6 6t < <==r|   c                 $    dt          |          iS Nr  )r
   rv   raw_hexs     rz   _decode_hexzEF_IMSI._decode_hex  s    ))**r|   c                 ,    t          |d                   S r  )r   rv   abstractr   s      rz   _encode_hexzEF_IMSI._encode_hex  s    ()))r|   File-Specific Commandsc                   0     e Zd Zdef fdZdefdZ xZS )EF_IMSI.AddlShellCommandsefc                 V    t                                                       || _        d S r   )r   r   _ef)rv   r  r   s     rz   r   z"EF_IMSI.AddlShellCommands.__init__  s$    GGDHHHr|   argc                 r   |                                 }t          |          dk    st          |          dk    r| j        j                                        \  }}|dk    rt          |d                   t          |          z
  dk    r|d         }|t          |          d         }| j        j                            d||z   i          \  }}|dk    r@|r@| j                            | j        j        j                            |                     dS dS dS t          d          t          d          )	z Change the plmn part of the IMSIr   r   9000r  r#   Nz&PLMN length does not match IMSI lengthzPLMN has wrong length!)
stripr   _cmdlchanread_binary_decupdate_binary_decpoutput_jsonselected_file
decode_hexr  )rv   r  plmndataswr  msins          rz   do_update_imsi_plmnz-EF_IMSI.AddlShellCommands.do_update_imsi_plmn  s.   99;;D4yyA~~Ta!Y_<<>>
r<<CV$5$5c$ii$?2$E$E<DD		

+D!%!B!Bd+"- "-JT2V|||	.. IO9DDTJJL L L L L $||| %%MNNN !9:::r|   )r   r   r   TransparentEFr   rr   r  r   r   s   @rz   r  r    s_        	} 	 	 	 	 	 		;3 	; 	; 	; 	; 	; 	; 	; 	;r|   r  )r  Nr  r  r  )r   r   r   r   r   r  r  with_default_category
CommandSetr  r   r   s   @rz   r  r    s        "f.?$AC"f.?$AC
O> > > > > >
+ + +* * * 344; ; ; ; ;J ; ; 54; ; ; ; ;r|   r  c                   L     e Zd ZddddfddddfgZ	 	 d fd	Zd Zd Z xZS )
EF_PLMNsel22F86022806)mccmnc3304203340206f30N
EF.PLMNselr   r7   Nr   c           	      H     t                      j        |f|||||d| d S )N)r   r   r   rA  r   r   	rv   r   r   r   r   rA  r   r   r   s	           rz   r   zEF_PLMNsel.__init__  7    d4dDRYdd]cdddddr|   c                 @    |d d         dk    rd S t          |          S Nr   ffffff)r   rv   in_hexr   s      rz   _decode_record_hexzEF_PLMNsel._decode_record_hex  s(    "1":!!4F###r|   c                 J    |d k    rdS t          |d         |d                   S )Nr  r  r  )r   r  s      rz   _encode_record_hexzEF_PLMNsel._encode_record_hex  s(    d??8GENGEN;;;r|   )r  Nr  r   r  r   )r   r   r   r   r   r  r  r   r   s   @rz   r  r    s        %668%779
O GV*+e e e e e e$ $ $< < < < < < <r|   r  c                   2     e Zd ZdddifgZ	 	 d
 fd		Z xZS )	EF_ACMmax000000acm_maxr   6f37N	EF.ACMmaxr   r   ACM maximum valuec                 ~     t                      j        |f||||d| t          dt          z            | _        d S )Nr@  r  )r   r   r   Int24ubr   rv   r   r   r   rA  r   r   r   s          rz   r   zEF_ACMmax.__init__  sE    S4dDSSFSSS 7!233r|   )r  Nr  r  r  r   r   r   r   r   r   r   s   @rz   r  r    s[        )Q(*
O FL)4 4 4 4 4 4 4 4 4 4r|   r  c                        e Zd Z fdZededeeef         fd            Zd Zd Z	 e
d           G d d	e                      Z xZS )
EF_ServiceTablec                     t                                          |||||           || _        | xj        |                                 gz  c_        d S r  )r   r   tabler  r  )rv   r   r   r   r   rA  r  r   s          rz   r   zEF_ServiceTable.__init__  sV    4dDIII
 6 6 8 899r|   servicer   c                 .    | dz
  }|dz  }|dz  dz  }||fS )Nr   r   r   r   )r  ibyte_offset
bit_offsets       rz   _bit_byte_offset_for_servicez,EF_ServiceTable._bit_byte_offset_for_service  s,    aKd!eq[
Z((r|   c                    i }t          dt          |          dz            D ]\}|dz   }t          ||dz                     }|dz  dz  }||z	  dz  }|| j        v r| j        |         nd |dz  rdnd|dz  rdndd||<   ]|S )	Nr   r   r   r   r   TF)description	allocated	activated)ranger   r   r  )rv   raw_binretr  
service_nrbyter  bitss           rz   _decode_binzEF_ServiceTable._decode_bin  s    q#g,,q.)) 		 		A1Jwq!t}%%Da%1JJ&!+D9Ctz9Q9Qtz*55W[%)AX8TT5%)AX8TT5 C
OO
 
r|   c                    d}|                                 D ]4}t          |          }|                     |          \  }}||k    r|dz   }5t          d|z            }|                                 D ]o}t          |          }|                     |          \  }}d}	||         d         dk    r|	dz  }	||         d         dk    r|	dz  }	||xx         |	dz  |z  z  cc<   p|S )	Nr   r   r
  r  Tr  r   r   )keysr   r  	bytearray)
rv   r  r   bin_lensrvr  r  r  outr  s
             rz   _encode_binzEF_ServiceTable._encode_bin  s   <<>> 	( 	(CSJ(,(I(I*(U(U%[*g%%%a-')**<<>> 	; 	;CSJ(,(I(I*(U(U%[*Ds|K(D00	s|K(D00	$(z!9:
r|   r  c                   T    e Zd Zd
dedee         dee         fdZd Zd Zd Z	d	 Z
dS )!EF_ServiceTable.AddlShellCommandsNr  allocateactivatec                    t                               |          \  }}| j        j                            d|          \  }}t          |          }|*|r|dxx         d|z  z  cc<   n|dxx         d|z   z  cc<   |*|r|dxx         d|z  z  cc<   n|dxx         d|z   z  cc<   | j        j                            t          |          |          \  }	}|S )Nr   )r  offsetr   r   )r  )r  r  r  r  read_binaryr  update_binaryr   )
rv   r  r  r  r  r  hex_datar  r  
total_datas
             rz   _adjust_servicez1EF_ServiceTable.AddlShellCommands._adjust_service  s    (7(T(TU_(`(`%[*9?66a6TTLHbx==D# 2GGGZ0GGGGGGGj11GGG# 2GGGZ0GGGGGGGj11GGG!Y_::3t99[:YYNJIr|   c                 N    |                      t          |          d           dS )z Allocate a service within EF.SSTTr  Nr  r   rv   r  s     rz   do_sst_service_allocatez9EF_ServiceTable.AddlShellCommands.do_sst_service_allocate"  '      Sd ;;;;;r|   c                 N    |                      t          |          d           dS )z"Deallocate a service within EF.SSTFr  Nr	  r
  s     rz   do_sst_service_deallocatez;EF_ServiceTable.AddlShellCommands.do_sst_service_deallocate&  '      Se <<<<<r|   c                 N    |                      t          |          d           dS )z Activate a service within EF.SSTTr  Nr	  r
  s     rz   do_sst_service_activatez9EF_ServiceTable.AddlShellCommands.do_sst_service_activate*  r  r|   c                 N    |                      t          |          d           dS )z"Deactivate a service within EF.SSTFr  Nr	  r
  s     rz   do_sst_service_deactivatez;EF_ServiceTable.AddlShellCommands.do_sst_service_deactivate.  r  r|   )NN)r   r   r   r   r   boolr  r  r  r  r  r   r|   rz   r  r    s        	 	c 	Xd^ 	_ghl_m 	 	 	 	"	< 	< 	<	= 	= 	=	< 	< 	<	= 	= 	= 	= 	=r|   r  )r   r   r   r   r3  r   r   r  r  r  r  r  r  r   r   s   @rz   r  r    s        : : : : :
 )c )eCHo ) ) ) \)    * 344 =  =  =  =  =J  =  = 54 =  =  =  =  =r|   r  c                   8     e Zd ZddddddfgZ	 	 d fd	Z xZS )EF_SPN"0147534d2d52204348ffffffffffffffffr   FTzGSM-R CH)r   hide_in_oplmnshow_in_hplmnspn6f46NEF.SPNr/   r.   r.   c                      t                      j        |f||||d| t          dt          d          z  dt          z  dt          z  dt          t          d                    z            | _        d S )Nr@  r   r   r  r  r  r,   )r   r   r,  BitsRFUr/  BytewiseGsmOrUcs2Stringr   rD  s          rz   r   zEF_SPN.__init__:  sx    S4dDSSFSSS#'!**D D (?2..///
 
r|   )r  Nr  r/   r  r  r   s   @rz   r  r  4  se        254PZ\\_
O
 4<4<

 

 

 

 

 

 

 

 

 

r|   r  c                   $     e Zd Z	 	 d fd	Z xZS )	EF_CBMI6f45NEF.CBMIr   Nr   +Cell Broadcast message identifier selectionc           	      z     t                      j        |f|||||d| t          t                    | _        d S r  r   r   GreedyRangeInt16ubr   	rv   r   r   r   rA  r   r   r   r   s	           rz   r   zEF_CBMI.__init__I  D    d4dDRYdd]cddd%g..r|   )r%  Nr&  r'  r   r(  rP  r   s   @rz   r$  r$  G  sC        VWC/ / / / / / / / / /r|   r$  c                        e Zd Zd Zd e            fd ed          fd ed          fd ed          fd	 ed
          fd eddddd
          fgZ	 	 d fd	Z xZS )EF_ACCc                  :      fdt          d          D             S )Nc                 @    i | ]}d                      |          |v S zACC{})format).0cactives     rz   
<dictcomp>z#EF_ACC.<lambda>.<locals>.<dictcomp>S  s+    SSSAq 1 1AKSSSr|   r,   )r  )r7  s   `rz   r)  zEF_ACC.<lambda>S  s"    SSSSrSSS r|   00000001r   0002r   0100r   8000r*   802br   r   6f78NEF.ACCAccess Control Classr   r   c                      t                      j        |f||||d| d t          d          D             }t          t	          t          |                     | _        d S )Nr@  c                 H    g | ]}d                      |          t          z   S r3  )r4  r/  )r5  r6  s     rz   
<listcomp>z#EF_ACC.__init__.<locals>.<listcomp>a  s)    ===a""T)===r|   r,   )r   r   r  ByteSwappedBitsSwappedr,  r   )	rv   r   r   r   r   rA  r   flagsr   s	           rz   r   zEF_ACC.__init__]  sf    S4dDSSFSSS==599===%k)U2C&D&DEEr|   )r?  Nr@  rA  rB  )r   r   r   acc_listr   r   r   r   s   @rz   r0  r0  O  s         TSH hhjj"hhqkk#hhqkk#hhqkk#hhrll$hhq1Qr**,
O 4<39F F F F F F F F F Fr|   r0  c                   X     e Zd Zd ed           ed          dddfgZd fd	Z xZS )EF_LOCI7802570222f8100978000078025702
22f8100978r   updated)tmsilai	tmsi_time	lu_status6f7eNEF.LOCILocation Informationr%   r%   c                    t                                          |||||           t          dt          d          z  dt          d          z  dt          z  dt          t          dd	d
d          z            | _        d S )Nr@  rP  r   rQ  r   rR  rS  r   r   r   r   )rO  not_updatedplmn_not_allowedlocation_area_not_allowed)r   r   r   r   r   Enumr0  r   r  s         rz   r   zEF_LOCI.__init__j  s    4dDIII a%a.+fBT!,T$qcdLM.O .O .O "OP Pr|   )rT  NrU  rV  rW  r   r   r   r  r   r   r   r   s   @rz   rK  rK  e  sz        &JL0A0APQ`ikkn
OP P P P P P P P P Pr|   rK  c                   `     e Zd ZdddddddfgZdZ G d d	ej                  Zd fd	Z xZ	S )EF_AD00ffffnormalr      TN)ms_operation_moderfu1rfu2ofm
extensionsc                   &    e Zd ZdZdZdZdZdZdZdS )EF_AD.OP_MODEr      r      r   r   N)	r   r   r   ra  type_approvalnormal_and_specific_facilities%type_approval_and_specific_facilitiesmaintenance_off_line	cell_testr   r|   rz   OP_MODEri  x  s/        )-&04-#			r|   rq  6fadEF.ADAdministrative Datar   r   c                    t                                          |||||           t          dt          t	          t
          t          j                            z  dt          t                    z  dt          d          z  dt          z  dt          t          dt          d	          z  d
t          d	          z  dt          t                    z                      z            | _        d S )Nr@  rc  rd  re  r   rf  rg  rfu3r   mnc_len)r   r   r,  r!  r\  r0  r_  rq  ByteRFUr   r/  r   r   r.  GreedyBytesRFUr   r  s         rz   r   zEF_AD.__init__  s    4dDIII#dEM)B)B C CC8G$$$71::$J6wqzz!+a..(Xn555	$ $   
 
r|   )rr  Nrs  rt  ru  )
r   r   r   r   r   enumIntEnumrq  r   r   r   s   @rz   r_  r_  q  s        %-sCPTdhjjm
O L    $,   
 
 
 
 
 
 
 
 
 
r|   r_  c                   *     e Zd ZdgZ	 	 d	 fd	Z xZS )
EF_VGCS)92f9ffff2996fb1NEF.VGCSr      r   Voice Group Call Servicec           	           t                      j        |f|||||d| t          t          t	          d                              | _        d S )Nr  r   )r   r   r   r   r   r   r-  s	           rz   r   zEF_VGCS.__init__  sP    d4dDRYdd]cddd*4a>>::r|   )r  Nr  r  r   r  r  r   s   @rz   r~  r~    sQ        !
O VW0; ; ; ; ; ; ; ; ; ;r|   r~  c                   6     e Zd Zddg difgZ	 	 d
 fd		Z xZS )EF_VGCSS010000004540fcrH  )2r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   6fb2NEF.VGCSSr   r   Voice Group Call Service Statusc           	           t                      j        |f||||d| t          t          dt          d         z  t          dd                              | _        d S )Nr@  rH  rZ   r   r   r   )r   r   rG  r,  Bitr   r   r  s          rz   r   zEF_VGCSS.__init__  sh    S4dDSSFSSS%iCGOWQ888': ': ; ;r|   )r  Nr  r  r  )r   r   r   _test_decoder   r   r   s   @rz   r  r    sq        
 c c c e	
L EK7; ; ; ; ; ; ; ; ; ;r|   r  c            
       T     e Zd ZddddddddddddddddddfgZ	 	 d fd	Z xZS )EF_eMLPP7c04FTABzeroonetwothreefour)levelsfast_call_setup_cond6fb5NEF.eMLPPrB  -enhanced Multi Level Pre-emption and Priorityc           
           t                      j        |f||||d| t          t          ddddddd	          }t	          d
|z  d|z            | _        d S )Nr@  r   r   r   r   r,   r?   @   r  r  r  r   r   	FlagsEnumr0  r   r   	rv   r   r   r   rA  r   r   FlagsConstructr   s	           rz   r   zEF_eMLPP.__init__  s|    S4dDSSFSSS"Ar"F F F ^#%;N%JL Lr|   )r  Nr  rB  r  r  r   s   @rz   r  r    s        
UT'+dDK K38ud[`5:UTY-\ -\  	O EKEL L L L L L L L L Lr|   r  c            
       B     e Zd ZddddddddddifgZ	 	 d fd	Z xZS )EF_AAeM3cauto_answer_prio_levelsFTr  6fb6NEF.AAeMr   r   "Automatic Answer for eMLPP Servicec           
           t                      j        |f||||d| t          t          ddddddd	          }t	          d
|z            | _        d S )Nr@  r   r   r   r   r,   r?   r  r  r  r  r  s	           rz   r   zEF_AAeM.__init__  sn    S4dDSSFSSS"Ar"F F F !:>!IJJr|   )r  Nr  r  r  r  r   s   @rz   r  r    s        
+Et\`6:TSX.[ .[ ] 	_O DJ:K K K K K K K K K Kr|   r  c                   $     e Zd Z	 	 d fd	Z xZS )	EF_CBMID6f48NEF.CBMIDr'  r   3Cell Broadcast Message Identifier for Data Downloadc           	      z     t                      j        |f|||||d| t          t                    | _        d S r  r*  r-  s	           rz   r   zEF_CBMID.__init__  r.  r|   )r  Nr  r'  r   r  rP  r   s   @rz   r  r    sC        WXK/ / / / / / / / / /r|   r  c                   $     e Zd Z	 	 d fd	Z xZS )	EF_ECC6fb7NEF.ECCr   r*   r   Emergency Call Codesc           	           t                      j        |f|||||d| t          t          t	          d                              | _        d S )Nr  r   )r   r   r+  
BcdAdapterr   r   r-  s	           rz   r   zEF_ECC.__init__  sR    d4dDRYdd]cddd%jq&:&:;;r|   )r  Nr  r  r   r  rP  r   s   @rz   r  r    sC        ST,< < < < < < < < < <r|   r  c                   $     e Zd Z	 	 d fd	Z xZS )	EF_CBMIR6f50NEF.CBMIRr   Nr   1Cell Broadcast message identifier range selectionc           	           t                      j        |f|||||d| t          t          dt          z  dt          z                      | _        d S )Nr  rs   upper)r   r   r+  r   r,  r   r-  s	           rz   r   zEF_CBMIR.__init__  sV    d4dDRYdd]cddd%fWW_ggo&N&NOOr|   )r  Nr  r  r   r  rP  r   s   @rz   r  r    sM        WXIP P P P P P P P P Pr|   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_DCK6f2cNEF.DCKr,   r,   Depersonalisation Control Keysc                 \    t                      j        |f||||d| t          dt          t	          d                    z  dt          t	          d                    z  dt          t	          d                    z  dt          t	          d                    z            | _        d S )Nr@  networkr   network_subsetservice_provider	corporate)r   r   r   r  r   r   r  s          rz   r   zEF_DCK.__init__  s    S4dDSSFSSS :eAhh+?+?!?!1*U1XX2F2F!F!3JuQxx4H4H!H!,Za-A-A!AC Cr|   )r  Nr  r  r  rP  r   s   @rz   r  r    sM        BJ6C C C C C C C C C Cr|   r  c                   0     e Zd Z	 	 d
 fd	Zd Zd	 Z xZS )EF_CNL6f32NEF.CNLr   Nr   rC   c           	      H     t                      j        |f|||||d| d S r  r   r-  s	           rz   r   zEF_CNL.__init__  r  r|   c                     t          dt          |                    \  }}}}t          t          |                    }||d<   ||d<   ||d<   |S )N!3sBBBr  service_provider_idcorporate_id)r   r  r   r   )rv   r  r   in_plmnsubsvpcorpress           rz   r  zEF_CNL._decode_record_hex  sX    $*8S[[$A$A!#sDs7||$$ #%(!""N
r|   c           
          t          |d         |d                   }t          t          dt          |          |d         |d         |d                             S )Nr  r  r  r  r  r  )r   r   r   r  )rv   r  r   r  s       rz   r  zEF_CNL._encode_record_hex  s\    774D		 01 56/	1 1 2 2 	2r|   )r  Nr  r  r   rC   )r   r   r   r   r  r  r   r   s   @rz   r  r    sg        UV1e e e e e e  2 2 2 2 2 2 2r|   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_NIA6f51NEF.NIAr   r?    Network's Indication of Alertingc                      t                      j        |f||||d| t          dt          z  dt          z            | _        d S )Nr   alerting_categorycategory)r   r   r   r   GreedyBytesr   rc  s          rz   r   zEF_NIA.__init__  sT    Y4dwYYRXYYY &
;(>@ @r|   )r  Nr  r  r  rP  r   s   @rz   r  r     sM        EL9@ @ @ @ @ @ @ @ @ @r|   r  c                   B     e Zd Zd ed          ddfgZd fd
	Z xZS )EF_Kc837d783609a3858f05837d783609a3858fr   )kccksn6f20NEF.KcCiphering key Kcr  c                      t                      j        |f||||d| t          dt          d          z  dt          z            | _        d S )Nr@  r  r   r  )r   r   r   r   r   r   rD  s          rz   r   zEF_Kc.__init__  sP    S4dDSSFSSS eAhhv>>r|   )r  Nr  r  r  r]  r   s   @rz   r  r    s_        
,>(?(? L LNO? ? ? ? ? ? ? ? ? ?r|   r  c                   j     e Zd Zd ed           ed           ed          ddfgZd fd	Z xZS )EF_LOCIGPRSffffffffffffff22f8990000ff01ffffffffr  22f8990000ffrY  )ptmsi	ptmsi_sigrai
rau_status6f53NEF.LOCIGPRSGPRS Location Informationrl  c                    t                                          |||||           t          dt          d          z  dt          d          z  dt          d          z  dt	          t
          d	d
dd          z            | _        d S )Nr@  r  r   r  r   r  r   r  r   r   r   )rO  rY  rZ  routing_area_not_allowed)r   r   r   r   r\  r0  r   r  s         rz   r   zEF_LOCIGPRS.__init__  s    4dDIII q!1;uQxx3G!&uQxx!-d4PQdeLM/O /O /O "OP Pr|   )r  Nr  r   rl  r]  r   s   @rz   r  r    s        
(S__33x==^I\I\ly
{
{	~OP P P P P P P P P Pr|   r  c                   z     e Zd Zdddddgdfddddgdfd	dd
g ddfgZd fd	Zd Zd Zed             Z xZ	S )EF_xPLMNwAcT
62F210400026201E-UTRAN NB-S1E-UTRAN WB-S1)r  r  act
62F2108000UTRAN
62F220488C02)r  r	  
EC-GSM-IoTGSMNG-RAN1234NrJ   Nr   c           	      H     t                      j        |f|||||d| d S r  r   r  s	           rz   r   zEF_xPLMNwAcT.__init__$  s7    d4dDRYdd]cdddddr|   c                 @    |d d         dk    rd S t          |          S r  )r   r  s      rz   r  zEF_xPLMNwAcT._decode_record_hex'  s(    "1":!!4"6***r|   c                     |d k    rdS t          |d         |d                   }|                     |d                   }||z   S )N
ffffff0000r  r  r
  )r   enc_act)rv   r  r   hplmnr
  s        rz   r  zEF_xPLMNwAcT._encode_record_hex-  sF    d??<WU^WU^<<E,,wu~..C3;r|   c                     d}d| v r|dz  }d| v r|dz  }d| v r|dz  }d| v r|d	z  }d
| v r|dz  }d| v r
d| v r|dz  }nd| v r|dz  }n	d| v r|dz  }d| v r
d| v r|dz  }nd| v r|dz  }n	d| v r|dz  }d|z  S )Nr   r  i   r  i   zGSM COMPACTr  zcdma2000 HRPDr?   zcdma2000 1xRTTr,   r	  r  i @  i `  i P  r  r           z%04Xr   )in_listu16s     rz   r  zEF_xPLMNwAcT.enc_act5  s	   g6MCw6MCG##6MCg%%6MCw&&6MCg%%/W*D*D6MCC''6MCC''6MCG 7 76MCCg6MCCW$$6MC~r|   )r  NNNr  r   )
r   r   r   r   r   r  r  r3  r  r   r   s   @rz   r  r    s        
to<`bbd
tgKIIK
t<}<}<}  	BO
e e e e e e+ + +     \    r|   r  c                   $     e Zd Z	 	 d fd	Z xZS )		EF_CPBCCH6f63N	EF.CPBCCHr   r)   r   rT   c           	           t                      j        |f|||||d| t          dt          z            | _        d S )Nr  cpbcch)r   r   r   r,  r   r-  s	           rz   r   zEF_CPBCCH.__init__U  sI    d4dDRYdd]cddd '!122r|   )r"  Nr#  r$  r   rT   rP  r   s   @rz   r!  r!  T  sC        VW*3 3 3 3 3 3 3 3 3 3r|   r!  c                   $     e Zd Z	 	 d fd	Z xZS )
EF_InvScan6f64N
EF.InvScanr  IOnvestigation Scanc                 ~     t                      j        |f||||d| t          t          dd          | _        d S )Nr@  r   r   )in_limited_service_modeafter_successful_plmn_selection)r   r   r  r0  r   r  s          rz   r   zEF_InvScan.__init__\  sQ    S4dDSSFSSS#!QP P Pr|   )r)  Nr*  r  r+  rP  r   s   @rz   r(  r(  [  sM        FL+P P P P P P P P P Pr|   r(  c            	       L     e Zd Zdddddddddddd	d
dddfgZd fd	Z xZS )EF_CFIS 0100ffffffffffffffffffffffffffffr   Fr   )voicefaxr  r   r   Tr  r   r   )
msp_numbercfu_indicator_statusr   r   r   r   ext7_record_id6fcbNEF.CFISr`   r   c                     t                      j        |f|||dd| d|z  }t          dt          z  dt	          dt
          z  dt
          z  dt
          z  d	t          d
          z            z  dt          z  dt          z  dt          t          t          t          d                                        z  dt          z  |t          z            | _        d S )N)r,   r=   r   r   r4  r5  r2  r3  r  r   r   r   r   r   r#   r   )r   r   r   r   r,  r/  r   r   rl   r  r   r   r   r   s	           rz   r   zEF_CFIS.__init__l  s    Z4dxZZSYZZZ$s* f!4!7	'$,PUVZPZ\bcg\ginovwxoyoyiy8z8z!z!-f!4!*6!1!-.@DQVWYQZQZOOA\A\.].]!]!.v!5!)&2 2r|   )r7  Nr8  r`   r   r  r   s   @rz   r0  r0  c  s        
,uU\ajk4m4mDG\`g kCUD UD EGWZnq	s s	uO	2 	2 	2 	2 	2 	2 	2 	2 	2 	2r|   r0  c                        e Zd Z G d ded          Z G d ded          Z G d d	eeeg
          Zd fd	Z xZ	S )EF_PNNc                       e Zd ZeZdS )EF_PNN.FullNameForNetworkNr   r   r   r  r   r   r|   rz   FullNameForNetworkr=  {           !


r|   r?  C   tagc                       e Zd ZeZdS )EF_PNN.ShortNameForNetworkNr>  r   r|   rz   ShortNameForNetworkrE    r@  r|   rF  E   c                       e Zd ZdS )EF_PNN.NetworkNameCollectionNr   r   r   r   r|   rz   NetworkNameCollectionrI            r|   rK  nested6fc5NEF.PNNr\   c                 f     t                      j        |f|||d| t          j        | _        d S N)r   r   r   )r   r   r;  rK  _tlvr   s         rz   r   zEF_PNN.__init__  s9    H4dHHHHH0			r|   )rO  NrP  r\   )
r   r   r   
BER_TLV_IEr?  rF  TLV_IE_CollectionrK  r   r   r   s   @rz   r;  r;  x  s        ! ! ! ! !ZT ! ! ! !
! ! ! ! !jd ! ! ! !
     1;MOb:c    1 1 1 1 1 1 1 1 1 1r|   r;  c                        e Zd Zdd ed           ed          dddfdd	 ed
           ed          dddfgZd fd	Z xZS )EF_OPL62f2100000fffe01z262-01r9  fffe)mcc_mnclac_minlac_maxr   )rQ  pnn_record_id216354789abcde12z123-456789abcder0   6fc6NEF.OPLr   r   r]   c                     t                      j        |f||||d| t          dt          dt          t	          d                    z  dt	          d          z  dt	          d          z            z  dt
          z            | _        d S )	Nr   rQ  rZ  r   r[  r   r\  r]  )r   r   r   PlmnAdapterr   r   r   rc  s          rz   r   zEF_OPL.__init__  s    Y4dwYYRXYYY viE!HH8M8M.M!*588!3YuQxx5G(I (I "IJYZ`J`b br|   )ra  Nrb  rc  r]   r]  r   s   @rz   rW  rW    s        
 (SS[[SSQW[[ZZmn
p
p	s
 )cc&kkccRXkk[[np
r
r	uOb b b b b b b b b br|   rW  c                   6     e Zd ZdddddddfgZd fd
	Z xZS )EF_MBI
0100000000r   r   )mbi_voicemailmbi_fax	mbi_email	mbi_othermbi_videocall6fc9NEF.MBIr   r   Mailbox Identifierc           
           t                      j        |f||||d| t          dt          z  dt          z  dt          z  dt          z  dt	          t                    z            | _        d S )Nr   ri  rj  rk  rl  rm  )r   r   r   r   r   r   rc  s          rz   r   zEF_MBI.__init__  sr    Y4dwYYRXYYY !769I;W]K]!,V!3_YvEVEV5VX Xr|   )rn  Nro  rp  rq  r  r   s   @rz   rg  rg    si        
111_`
b
b	eOX X X X X X X X X Xr|   rg  c                   L     e Zd ZdddddddddddddfgZdZ	 	 d fd	Z xZS )EF_MWIS
0000000000F	voicemailr3  emailother	videomailr   N)
mwi_statusnum_waiting_voicemailnum_waiting_faxnum_waiting_emailnum_waiting_othernum_waiting_videomailT6fcaEF.MWISr   r   r_   c                     t                      j        |f||||d| t          dt          t          ddddd          z  d	t
          z  d
t
          z  dt
          z  dt
          z  dt          t
                    z            | _        d S )Nr   r{  r   r   r   r   r,   rv  r|  r}  r~  r  r  )r   r   r   r  r0  r   r   r   rc  s          rz   r   zEF_MWIS.__init__  s    Y4dwYYRXYYY iqXYabnp.q.q.q!q!8!?!26!9;Nv;U!4V!;=TU^_eUfUf=fh hr|   )r  Nr  r  r_   r   r   s   @rz   rt  rt    s        
',UUUZ! !;<QRij !DB B	DO LFL9h h h h h h h h h hr|   rt  c                   h     e Zd Z G d ded          Z G d dedeg          Z	 	 d fd	Z xZS )EF_SPDIc                   H    e Zd Z e e ed                              ZdS )EF_SPDI.ServiceProviderPLMNr   N)r   r   r   r+  re  r   r   r   r|   rz   ServiceProviderPLMNr    s/         [UU1XX!6!677


r|   r  rj  rB  c                       e Zd ZdS )EF_SPDI.SPDINrJ  r   r|   rz   SPDIr    rL  r|   r     )rC  rN  6fcdNEF.SPDIra   c                 f     t                      j        |f|||d| t          j        | _        d S rR  )r   r   r  r  rS  r   s         rz   r   zEF_SPDI.__init__  s8    H4dHHHHHL			r|   )r  Nr  ra   )r   r   r   rT  r  r  r   r   r   s   @rz   r  r    s        8 8 8 8 8jd 8 8 8 8    zt-@,A    3<<! ! ! ! ! ! ! ! ! !r|   r  c                         e Zd Zd fd	Z xZS )EF_MMSN6fceNEF.MMSNr   r3   MMS Notificationc           	          t                      j        |f||||d| t          dt          d          z  dt          d          z  dt          t          j        j        dz
            z  dt          z            | _        d S )	Nr   
mms_statusr   mms_implementationr   mms_notificationr   ext_record_nr)	r   r   r   r   r   r   r   r0  r   rc  s          rz   r   zEF_MMSN.__init__  s    Y4dwYYRXYYY eAhh!68LUSTXX8U!3E$&:J1:L4M4M!M_cOce er|   )r  Nr  r  r  rP  r   s   @rz   r  r    sG        e e e e e e e e e er|   r  c                   (    e Zd Z eed          ZdS )MMS_Implementationr   )WAPN)r   r   r   r  r0  r   r   r|   rz   r  r    s"        4Q'''JJJr|   r  rj  rB  c            	            e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d deeeeeg          Z		 	 d fd	Z
 xZS )	EF_MMSICPc                       e Zd ZdS )EF_MMSICP.MMS_Relay_ServerNrJ  r   r|   rz   MMS_Relay_Serverr            r|   r  rk  rB  c                       e Zd ZdS )EF_MMSICP.Interface_to_CNNrJ  r   r|   rz   Interface_to_CNr    r  r|   r     c                       e Zd ZdS )EF_MMSICP.GatewayNrJ  r   r|   rz   Gatewayr    r  r|   r     c                       e Zd ZdS )#EF_MMSICP.MMS_ConnectivityParamtersNrJ  r   r|   rz   MMS_ConnectivityParamtersr    r  r|   r  rM  6fd0N	EF.MMSICPr}  "MMS Issuer Connectivity Parametersc                 h     t                      j        |f||||d| t          j        | _        d S r  )r   r   r  r  rS  r  s          rz   r   zEF_MMSICP.__init__  s;    S4dDSSFSSS7			r|   )r  Nr  r}  r  )r   r   r   rT  r  r  r  rU  r  r  r   r   r   s   @rz   r  r    s           :4        *$        *$        $5,>@PRacj+k    FO:8 8 8 8 8 8 8 8 8 8r|   r  c                        e Zd Z G d ded          Z G d ded          Z G d d	eeeeg
          Z	 	 d fd	Z	 xZ
S )EF_MMSUPc                   $    e Zd Z ee          ZdS )!EF_MMSUP.MMS_UserPref_ProfileNameN)r   r   r   r   r  r   r   r|   rz   MMS_UserPref_ProfileNamer    s        %%k22


r|   r  rk  rB  c                       e Zd ZdS )EF_MMSUP.MMS_UserPref_InfoNrJ  r   r|   rz   MMS_UserPref_Infor    rL  r|   r  r  c                       e Zd ZdS )EF_MMSUP.MMS_User_PreferencesNrJ  r   r|   rz   MMS_User_Preferencesr    r  r|   r  rM  6fd1NEF.MMSUPr}  MMS User Preferencesc                 h     t                      j        |f||||d| t          j        | _        d S )Nr   )r   r   r  r  rS  rc  s          rz   r   zEF_MMSUP.__init__  s<    Y4dwYYRXYYY1			r|   )r  Nr  r}  r  )r   r   r   rT  r  r  rU  r  r  r   r   r   s   @rz   r  r    s        3 3 3 3 3:4 3 3 3 3    JD        0'9;SUf&g    HQ,2 2 2 2 2 2 2 2 2 2r|   r  c                   $     e Zd Z	 	 d fd	Z xZS )	EF_MMSUCP6fd2N	EF.MMSUCPr}  rb   c                 F     t                      j        |f||||d| d S r  r   r  s          rz   r   zEF_MMSUCP.__init__  s3    S4dDSSFSSSSSr|   )r  Nr  r}  rb   rP  r   s   @rz   r  r    sM        EN8T T T T T T T T T Tr|   r  c                   :     e Zd ZdddifgZd fd	Zd	 Zd
 Z xZS )EF_ICCID988812010000400310f0iccid89882110000004300102fe2r   EF.ICCIDICC Identificationc                 T    t                                          ||||d           d S )N)r#   r#   r@  r   rv   r   r   r   r   r   s        rz   r   zEF_ICCID.__init__  s,    4dHMMMMMr|   c                 $    dt          |          iS Nr  )r   r  s     rz   r  zEF_ICCID._decode_hex  s    7++,,r|   c                 ,    t          |d                   S r  )r	   r  s      rz   r  zEF_ICCID._encode_hex  s    '*+++r|   )r  r   r  r  )r   r   r   r   r   r  r  r   r   s   @rz   r  r    sv        
 G-B"DFON N N N N N- - -, , , , , , ,r|   r  c                   4     e Zd Zg dZd	 fd	Zd Zd Z xZS )
EF_PL))6465de)656een)ffffN2f05r   EF.PLPreferred Languagesc                 V    t                                          ||||dd           d S )Nr   r'  )r   r   r   r   rA  r   r  s        rz   r   zEF_PL.__init__  s;    4d"AI 	 	? 	? 	? 	? 	?r|   c                 <    |dk    rd S |                     d          S Ns   ascii)decode)rv   bin_datar   s      rz   r   zEF_PL._decode_record_bin  s$    {""4??7+++r|   c                 4    |dS |                     d          S r  )encoder  s      rz   r  zEF_PL._encode_record_bin  s    ?;>>'***r|   )r  r   r  r  r  r   s   @rz   r  r    sl          O? ? ? ? ? ?, , ,+ + + + + + +r|   r  c                   ^     e Zd Zd fd	Z ed           G d de                      Z xZS )	DF_GSM7f20DF.GSMGSM Network related filesc           	      p   t                                          |||           | xj        |                                 gz  c_        g t	                      t                      t                      t                      t          dd dd          t                      t          dd ddt          d	
          t          dd ddd          t          dd dd          t          dd dd          t                      t          dd ddd          t                      t          dd ddd          t                      t          dd d d!d"          t!                      t#                      t          d#d d$d%d&          t%                      t'                      t%          d'd d(d)          t'          d*d d+d,          t)                      t+                      t-                      t/                      t1                      t3                      t5                      t7                      t          d-d d.d/          t9                      t          d0d d1d2          t;          d3d d4d5          t;          d6d d7d8          t;          d9d d:d;          t=                      t?                      tA                      tC                      tE          d<d d=d>          tG                      tI                      tK                      tM          d?d d@dA          tM          dBd dCdD          tO                      tQ                      tM          dEd dFdG          tS                      tU                      tW                      }| ,                    |           d S )HNri  6f31z	EF.HPPLMNz"Higher Priority PLMN search period)r   6f38zEF.SSTzSIM service table)r   r,   )r   r  rA  6f39zEF.ACMzAccumulated call meterr  )r   r   6f3ezEF.GID1r+   6f3fzEF.GID2r-   6f41zEF.PUCTz!Price per unit and currency table)r   r   )r   rA  6f74zEF.BCCHzBroadcast control channelsr  6f7bzEF.FPLMNzForbidden PLMNs)r'   r'   6faezEF.PhasezPhase identificationr  6fb3zEF.VBSzVoice Broadcast Service6fb4zEF.VBSSzVoice Broadcast Service Status6f52z	EF.KcGPRSzGPRS Ciphering key KcGPRS6f54zEF.SUMEzSetUpMenu Elements6f60zEF.PLMNwAcTrN   6f61zEF.OPLMNwAcTrP   6f62zEF.HPLMNwAcTrR   6fc7zEF.MBDNr^   6fc8zEF.EXT6zExternsion6 (MBDN)6fcczEF.EXT7zExternsion7 (CFIS)6fcfzEF.EXT8zExtension8 (MMSN))-r   r   r  r  ry  r  r  r  r  r  r  
EF_SST_mapCyclicEFr  r$  r0  rK  r_  r~  r  r  r  r  r  r  r  r  r  r  r  r!  r(  r;  rW  r   rg  rt  r0  rR  r  r  r  r  r  rv  )rv   r   r   r   rw  r   s        rz   r   zDF_GSM.__init__#  s>   St$777 6 6 8 899A
GGA
IIA
 GGA
 LL	A

 &$CE E EA
 KKA
 FD(!4JWV V VA
 VT82FD D DA
 &$	8RSSSA
 &$	8RSSSA
 HHA
 &$	BQ Q QA
" II#A
$ &$	;(L L L%A
( HH)A
* vtZ-H> > >+A
. II/A
0 GG1A
2 &$
5FD D D3A
6 II7A
8 JJ9A
: FD(1JKKK;A
< VT9:< < <=A
@ JJAA
B IICA
D JJEA
F HHGA
H JJIA
J HHKA
L HHMA
N HHOA
P &$2MNNNQA
R MMSA
T &$	8LMMMUA
V }TV V VWA
Z ~XZ Z Z[A
^ ~EG G G_A
b KKcA
d LLeA
f HHgA
h HHiA
j 641KLLLkA
l HHmA
n IIoA
p IIqA
r 641EFFFsA
t 641EFFFuA
v IIwA
x IIyA
z 641DEEE{A
| KK}A
~ JJA
@ KKAA
D 	ur|   zApplication-Specific Commandsc                        e Zd Z fdZe                                Ze                    ded           e	
                    e          d             Z xZS )DF_GSM.AddlShellCommandsc                 H    t                                                       d S r   r   )rv   r   s    rz   r   z!DF_GSM.AddlShellCommands.__init__m  s    GGr|   RANDzRandom challenge)r   helpc                     | j         j        j                            |j                  \  }}| j                             |           dS )zPerform GSM Authentication.N)r  r  sccrun_gsmr  r  )rv   optsr  r  s       rz   do_authenticatez(DF_GSM.AddlShellCommands.do_authenticates  s@     ,44TY??JT2I""4(((((r|   )r   r   r   r   argparseArgumentParserauthenticate_parseradd_argument	is_hexstrcmd2with_argparserr  r   r   s   @rz   r  r  k  s        	 	 	 	 	 '5577((iFX(YYY			0	1	1	) 	) 
2	1	) 	) 	) 	) 	)r|   r  )r  r  r  )r   r   r   r   r  r  r  r   r   s   @rz   r  r  "  s        F F F F F FP :;;) ) ) ) )J ) ) <;) ) ) ) )r|   r  c                   b     e Zd ZdZ fdZededefd            Ze	de
ddfd            Z xZS )	CardProfileSIMr=   c                    dddddddidd	d
ddddddddddddddddddd}t                      t                      t                      t                      g}t          g}t                                          ddd d!|||"           d S )#NzNormal ending of the commandzknormal ending of the command, with extra information from the proactive SIM containing a command for the MEzIlength XX of the response data given in case of a SIM data download errorzlength XX of the response data)r  91xx9exx9fxx9300zkSIM Application Toolkit is busy. Command cannot be executed at present, further normal commands are allowedzKcommand successful but after using an internal update retry routine X timeszmemory problem)920x9240zno EF selectedzout of range (invalid address)z&file ID not found or pattern not foundz%file is inconsistent with the command)9400940294049408zno CHV initializedzVaccess condition not fulfilled, unsuccessful CHV verification or authentication failedz in contradiction with CHV statusz)in contradiction with invalidation statusz;unsuccessful verification, CHV blocked, UNBLOCK CHV blockedz/increase cannot be performed, Max value reached)980298049808981098409850zincorrect parameter P3zincorrect parameter P1 or P2z-unknown instruction code given in the commandz,wrong instruction class given in the commandz*technical problem with no diagnostic given)67xx6bxx6dxx6exx6fxx)NormalzPostponed processingzMemory managementzReferencing managementzSecurity managementzApplication independent errorsSIMzGSM SIM Carda0r9  )r   clasel_ctrlfiles_in_mfr  addons)r  r  re  r  r   r   r   )rv   r  rw  r2  r   s       rz   r   zCardProfileSIM.__init__~  s    7 Fc8	    F% f(" "
 )8@?	' ' -p:CUI$ $ 16GFD/ /9#
 #
L JJGGLLHH	
 
 	^"(eV 	 	U 	U 	U 	U 	Ur|   resp_hexr   c                 l   t          |           }dddd}dddd}d	i ii d
}t          |dd                   |d<   |d         |v r||d                  n|d         }||d         d	         d<   |dv rut                              |dd         d          |d         d<   t          |dd                   |d<   |d         |d<   |d         |d<   t          |d                   |d<   n|dv rt                              |dd         d          |d<   |d         |v r||d                  n|d         }||d         d	         d<   |dk    r'|d         }||d         d <   |d         |z  |d         d!<   t          |d"d#                   |d$<   |d%         d&z  d'k    rd(|d)<   n|d%         dz  rd*|d)<   nd+|d)<   |S ),Ntransparentlinear_fixedcyclic)r   r   r   mfdf
working_ef)r   r   r   file_descriptor_byte)file_descriptorproprietary_infor   r   file_idr<  	file_type)r8  r9  r   bigr=  available_memoryr(   r)   file_characteristicsnum_direct_child_dfr*   num_direct_child_efr,   num_chv_unblock_adm_codes)r:  	file_size	structure
record_len
num_of_recr   r#   access_conditionsr%   r   r   operational_activatedlife_cycle_status_intoperational_deactivated
terminated)r  r   r   
from_bytes)r3  resp_binstruct_of_file_maptype_of_file_mapr  r?  file_structrH  s           rz   decode_select_responsez%CardProfileSIM.decode_select_response  sd   
 x==
 
 
 
 '  !#	
 
 Xac]++I*21+9I*I*I %Xa[ ' 'OWXY{ 	FO56{C$$:=..RSTURUX]:^:^C"#$67*-hr"uo*>*>C&')1"C%&)1"C%&/28B</@/@C+,,.(("~~hqsmUCCC2:2,BT2T2T -Xb\ / /ZbceZf JUC!"#9:;Gm++%b\
7A%&|47:;7G:7U%&|4'*8AbD>':':C#$|d"a''/F+,,"$ </H+,,/;+,
r|   r	  Nc                 8    |                      |dddg           d S )Nr.  r9  3f00)_mf_select_test)clsr	  s     rz   _try_match_cardzCardProfileSIM._try_match_card  s$    Cvx88888r|   )r   r   r   ORDERr   r3  rr   objectrT  classmethodSimCardCommandsrY  r   r   s   @rz   r  r  z  s        E2U 2U 2U 2U 2Uh 0 0 0 0 0 \0d 9/ 9d 9 9 9 [9 9 9 9 9r|   r  c                   2     e Zd ZdZ fdZdddefdZ xZS )AddonSIMzJAn add-on that can be found on a UICC in order to support classic GSM SIM.c                     t                      t                      g}t                                          dd|           d S )Nr-  zGSM SIM)r   r1  )r  re  r   r   )rv   rw  r   s     rz   r   zAddonSIM.__init__  s?    HHLL
 	YEBBBBBr|   cardCardBaser   c                 L    |                     | j        d         j                  S )Nr   )file_existsr1  r   )rv   ra  s     rz   probezAddonSIM.probe  s!     0 3 7888r|   )r   r   r   r   r   r  re  r   r   s   @rz   r_  r_    se        TTC C C C C9 9 9 9 9 9 9 9 9 9r|   r_  )[r   r{  structr   r   typingr   	constructr   r   osmocom.tlvosmocom.utilsosmocom.constructpySim.utilsr   r	   r
   r   r   r   r   r   pySim.profiler   r   pySim.filesystempySim.ts_31_102_telecomr   r   r   r   pySim.gsm_rr   r  r2  rl   ru  r   r   r   r   r  r5  rF  rR  r[  CardDFre  
TransRecEFry  r  r  r  r  r  r$  r0  rK  r_  r~  r  r  r  r  r  r  r  r  r  r  r  r  r!  r(  r0  r;  rW  rg  rt  r  r  rT  r  r  r  r  r  r  r  r  r_  r   r|   rz   <module>rs     s^   2                + + + + + +                 e e e e e e e e e e e e e e e e e e ) ) ) ) ) ) 7 7 7 7 7 7 7 7     O O O O O O O O O O O O ! ! ! ! ! !<<+< %< $	<
 < 2< < u< x< < < < #< +< "<  "!<" #< <$ (%<& '<( )<* 9+<, 6-<. A/<0 $1<2 "3<4 "5<6 7<8 9<: ;<< 2=<> '?<@ A<B )C<D #E< < <F &G<H 5I<J 8K<L M<N O<P /Q<R ;S<T  U<V >W<X BY<Z /[<\ ]<^ _<` 6a<b c<d 'e<f g< <h 	"++.,*w< < <
J5 5 5 5 5 5 5 52 2 2 2 2Z 2 2 24Z Z Z Z ZZ Z Z Z>0N 0N 0N 0N 0N
 0N 0N 0NfIV IV IV IV IVj IV IV IVX\ \ \ \ \m \ \ \C C C C Cj C C CS S S S SZ S S Si i i i iZ i i i       H    J   &; &; &; &; &;m &; &; &;T< < < < < < < <,4 4 4 4 4 4 4 4Q= Q= Q= Q= Q=m Q= Q= Q=j
 
 
 
 
] 
 
 
&/ / / / /j / / /F F F F F] F F F,	P 	P 	P 	P 	Pm 	P 	P 	P"
 "
 "
 "
 "
M "
 "
 "
J; ; ; ; ;j ; ; ;; ; ; ; ;} ; ; ;L L L L L} L L L"
K 
K 
K 
K 
Km 
K 
K 
K/ / / / /w / / /< < < < <Z < < <P P P P Pz P P PC C C C C] C C C2 2 2 2 2Z 2 2 2,@ @ @ @ @Z @ @ @? ? ? ? ?M ? ? ?
P 
P 
P 
P 
P- 
P 
P 
P3 3 3 3 3: 3 3 3l3 3 3 3 3
 3 3 3P P P P P P P P2 2 2 2 2j 2 2 2*1 1 1 1 1Z 1 1 1*
b 
b 
b 
b 
bZ 
b 
b 
bX X X X XZ X X Xh h h h hj h h h$! ! ! ! !m ! ! !e e e e ej e e e( ( ( ( ( ( ( ( (8 8 8 8 8 8 8 8,2 2 2 2 2z 2 2 2 T T T T T T T T, , , , ,} , , ,+ + + + +J + + +.U) U) U) U) U)V U) U) U)pm9 m9 m9 m9 m9[ m9 m9 m9`9 9 9 9 9 9 9 9 9 9r|   