+
    	:i~  c                   s"   ^ RI t ^ RIt^ RIt^ RIt^RIHt ^RIHt ^RIHt ^RIHt ^RIH	t	 Rt
/ R<RbR=RbR>R	bR?R
bR@RbRARbRBRbRCRbRDRbRERbRFRbRGRbRHRbRIRbRJRbRKRbRLRb/ RMRbRNRbRORbRPRbRQRbRRRbRSRbRTRbRUR bRVR!bRWR"bRXR#bRYR$bRZR%bR[R&bR\R'bR]R(bC/ R^R)bR_R*bR`R+bRaR,bRbR-bRcR.bRdR/bReR0bRfR1bRgR2bRhR3bRiR4bRjR5bRkR6bRlR7bRmR8bRnR:bCRoR9RpR;/CtRqtRrtRstRttRutRvtRwtRxtRytRztR{tR|tR}tR~tRtRtRtRtRtR tR t R t!R t"R t#R t$R t%R t&R t'Rs(Rs)Rs*Rs+Rs,RR lt-R t.R t/R t0R t1R t2R t3R t4R t5R t6R t7R t8R t9R t:R t;R t<R t=R t>R t?R t@R tAR tBR tCR tDR tER tFR tGR tHR tIR tJR tKR tLR tMR tNR tOR tPR tQR tRR tSR tTR tUR tVR tWR tXR tYR tZR t[R t\R t]R t^R t_R t`R taR tbR tcR tdR teR tfR tgR thR tiR tjR tkR tlR tmR tnR toR tpR tqR trR tsR ttRsuRsvR twRR ltxR tyRR ltzR# )i    N)access)defaults)lex)	refpolicy)yaccMODULEPOLICY_MODULEREQUIRESIDGENFSCONFS_USE_XATTRFS_USE_TRANSFS_USE_TASKPORTCONNODECONNETIFCONPIRQCONIOMEMCON	IOPORTCONPCIDEVICECONDEVICETREECONCLASSTYPEATTRIBUTEROLEATTRIBUTETYPE	ATTRIBUTEATTRIBUTE_ROLEALIAS	TYPEALIASBOOLTRUEFALSEIFELSEROLETYPESALLOW	DONTAUDIT
AUDITALLOW
NEVERALLOW
PERMISSIVE
TYPEBOUNDSTYPE_TRANSITIONTYPE_CHANGETYPE_MEMBERRANGE_TRANSITIONROLE_TRANSITION
OPT_POLICY	INTERFACETUNABLE_POLICYGEN_REQTEMPLATEGEN_CONTEXTGEN_TUNABLEIFELSEIFDEFIFNDEFDEFINEmoduleZpolicy_moduleZrequireZsidZgenfsconfs_use_xattrfs_use_transfs_use_taskZportconZnodeconZnetifconZpirqconZiomemconZ	ioportconZpcideviceconZdevicetreeconZclassZtypeattributeZroleattributetypeZ	attributeZattribute_roleZaliasZ	typealiasZbooltrueZfalseZifZelseroletypesZallow	dontaudit
auditallow
neverallowZ
permissiveZ
typeboundsZtype_transitiontype_changetype_memberZrange_transitionZrole_transitionZoptional_policy	interfaceZtunable_policyZgen_requireZtemplateZgen_contextZgen_tunableZifelseZifndefifdefZdefinez\`z\'z\{z\}z\;+z\:z\(z\)z\,z\-z\~z\*z\&z\|z\!z\=z[0-9\.]+z/[a-zA-Z0-9)_\.\*/\$]*z 	c                s    V # )z2[a-fA-F0-9]{0,4}:[a-fA-F0-9]{0,4}:([a-fA-F0-9]|:)* t   &7/usr/lib/python3.14/site-packages/sepolgen/refparser.pyt_IPV6_ADDRrN      s	     H    c                L    V P                   ;P                  ^,          un        R# )zdnl.*\nNlexerlinenorJ   rL   rM   t_m4commentrT           GGNNaNrO   c                s(    V P                  ^4       R# )zdefine.*refpolicywarn\(.*\nN)skiprJ   rL   rM   t_refpolicywarn1rW      s     FF1IrO   c                rP   )zrefpolicywarn\(.*\nNrQ   rJ   rL   rM   t_refpolicywarnrX      s     GGNNaNrO   c                P    \         P                  V P                  R4      V n        V # )z#[a-zA-Z_\$][a-zA-Z0-9_\-\+\.\$\*~]*
IDENTIFIERreservedZgetvaluer>   rJ   rL   rM   t_IDENTIFIERr^     s     \\!'',/AFHrO   c                rY   )z"\"[a-zA-Z0-9_\-\+\.\$\*~ :\[\]]+\"FILENAMEr[   rJ   rL   rM   
t_FILENAMEr`     s     \\!''*-AFHrO   c                rP   )z\#.*\nNrQ   rJ   rL   rM   	t_commentra     rU   rO   c                 sn    \        R V P                  ^ ,          ,          4       V P                  ^4       R# )zIllegal character '%s'N)printr]   rV   rJ   rL   rM   t_errorrc     s#    	
"QWWQZ
/0FF1IrO   c                sr    V P                   ;P                  \        V P                  4      ,          un        R# )z\n+N)rR   rS   lenr]   rJ   rL   rM   	t_newlinere     s    GGNNc!''l"NrO    Tc                 s    V f   R # V  FN  pVf   K	  Wn         Ve    VP                  P                  ^ W#34       K2  VP                  P                  ^ V4       KP  	  R # N)parentchildrenZinsert)Zstmtsrh   valss   &&& rM   collectrl   /  sP    }9?OO""1sh/OO""1a( rO   c                 s    V  FU  p\         P                  V4      '       d'   VP                  \         P                  V4      4       KD  VP	                  V4       KW  	  R # rg   )sptZhas_keyupdateZby_nameadd)Zidsrk   Zids   && rM   expandrp   ;  s8    ;;r??HHS[[_%EE"I	 rO   c                s&   \        V 4      ^8X  d8   V ^,          '       d)   \        P                  P                  V ^,          4       R# \        V 4      ^8  d:   V ^,          '       d)   \        P                  P                  V ^,          4       R# R# R# )z6statements : statement
| statements statement
| empty
N)rd   mri   appendprL   rM   p_statementsru   C  s]    
 1v{qtt	

!A$	Q!!	

!A$ rO   c                    V ^,          V ^ &   R# )z\statement : interface
| template
| obj_perm_set
| policy
| policy_module_stmt
| module_stmt
NrI   rs   rL   rM   p_statementrw   M       Q4AaDrO   c                    R# )zempty :NrI   rs   rL   rM   p_emptyrz   W      rO   c                s~    \         P                  ! 4       pV ^,          Vn        V ^,          Vn        RVn         W^ &   R# )zHpolicy_module_stmt : POLICY_MODULE OPAREN IDENTIFIER COMMA NUMBER CPARENTNr   ZModuleDeclarationnameZversionrt   rq      & rM   p_policy_module_stmtr   b  s4    ##%AqTAF!AIAKaDrO   c                n    \         P                  ! V ^,          4      p\        V ^,          V4       W^ &   R# )zainterface : INTERFACE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
    N)r   	Interfacerl   rt   xr   rM   p_interfacer   j  s-     	AaD!AAaD!aDrO   c                r   )ztemplate : TEMPLATE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
| DEFINE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
N)r   ZTemplaterl   r   r   rM   
p_templater   q  s-     	1Q4 AAaD!aDrO   c                s    RV ^ &   R# )z4define : DEFINE OPAREN TICK IDENTIFIER SQUOTE CPARENNrI   rs   rL   rM   p_definer   y  s    
 AaDrO   c                sN   \        V 4      ^8X  d   V ^,          '       d   V ^,          V ^ &   R# \        V 4      ^8  dh   V ^,          '       g    V ^,          '       d   V ^,          V ^ &   R# R# V ^,          '       g   V ^,          V ^ &   R# V ^,          V ^,          ,           V ^ &   R# R# )z:interface_stmts : policy
| interface_stmts policy
| empty
Nrd   rs   rL   rM   p_interface_stmtsr     s    
 1v{qttt!	Q!ttttt! 1Q4AaDQ4!A$;AaD 
rO   c                s    \         P                  ! 4       p\        V ^,          VRR7       \        V 4      ^8  d   \        V ^,          VRR7       V.V ^ &   R# )zoptional_policy : OPT_POLICY OPAREN TICK interface_stmts SQUOTE CPAREN
| OPT_POLICY OPAREN TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
Trj   FN)r   ZOptionalPolicyrl   rd   )rt   or   rM   p_optional_policyr     sH     	  "AAaD!
1vz!aU#3AaDrO   c                s    \         P                  ! 4       pV ^,          Vn        \        V ^,          VRR7       \	        V 4      ^8  d   \        V ^,          VRR7       V.V ^ &   R# )ztunable_policy : TUNABLE_POLICY OPAREN TICK cond_expr SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
| TUNABLE_POLICY OPAREN TICK cond_expr SQUOTE COMMA TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
Tr   FN)r   ZTunablePolicy	cond_exprrl   rd   r   r   rM   p_tunable_policyr     sS     	!AA$AKAaD!
1v{"qe$3AaDrO   c                sL    \        V 4      ^8X  d   V ^,          V ^ &   R# RV ^ &   R# )zifelse_compare_value : TICK IDENTIFIER SQUOTE
| TICK TRUE       SQUOTE
| TICK FALSE      SQUOTE
| TICK            SQUOTE
| empty
Nr   rs   rL   rM   p_ifelse_compare_valuer     s%     1v{t!!rO   c                sv    \         P                  ! V ^,          4      p\        V ^,          VRR7       V.V ^ &   R# )ziifelse_section : TICK IDENTIFIER SQUOTE COMMA ifelse_compare_value COMMA TICK interface_stmts SQUOTE
    Tr   Nr   ZIfElserl   r   r   rM   p_ifelse_sectionr     s3     	1AAaD!3AaDrO   c                sv    \        V 4      ^8X  d   V ^,          V ^,          ,           V ^ &   R# V ^,          V ^ &   R# )zHifelse_sections : ifelse_sections COMMA ifelse_section
| ifelse_section
Nr   rs   rL   rM   p_ifelse_sectionsr     s1     1v{tad{!t!rO   c                s    \         P                  ! V ^,          4      p\        V ^,          VRR7       \        V ^,          VRR7       V.V ^ &   R# )zbifelse : IFELSE OPAREN ifelse_sections COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
    Tr   FNr   r   r   rM   p_ifelser     sC     	1AAaD!AaD!3AaDrO   c                s    \         P                  ! V ^,          4      pV ^,          R8X  d   RpMRp\        V ^,          WR7       \        V 4      ^8  d   \        V ^,          VRR7       V.V ^ &   R# )a,  ifdef : IFDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK statements SQUOTE CPAREN optional_semi
| IFNDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK statements SQUOTE CPAREN optional_semi
| IFDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK statements SQUOTE COMMA TICK statements SQUOTE CPAREN optional_semi
rH   TFr   N)r   ZIfDefrl   rd   )rt   r   Zv   &  rM   p_ifdefr     s_    
 	!AtwAaD!
1v{"qe$3AaDrO   c                s    \         P                  ! V ^,          R7      p\        V 4      ^8  d#   VP                  P	                  V ^,          4       W^ &   R# )zinterface_call : IDENTIFIER OPAREN interface_call_param_list CPAREN
| IDENTIFIER OPAREN CPAREN
| IDENTIFIER OPAREN interface_call_param_list CPAREN SEMI)ZifnameN)r   ZInterfaceCallrd   ZargsZextend)rt   Zir   rM   p_interface_callr     s>    
 	qt,A
1vz	adaDrO   c                s    \        V 4      ^8X  d   V ^,          V ^ &   R# \        V 4      ^8X  d   RV ^,          ,           V ^ &   R# V ^,          RV ^,          ,           .V ^ &   R# )zinterface_call_param : IDENTIFIER
| IDENTIFIER MINUS IDENTIFIER
| MINUS IDENTIFIER
| nested_id_set
| TRUE
| FALSE
| quoted_filename
-Nr   rs   rL   rM   p_interface_call_paramr     sR     1v{t!	Q1QqTz!!cAaDj!!rO   c                sz    \        V 4      ^8X  d   V ^,          .V ^ &   R# V ^,          V ^,          .,           V ^ &   R# )zhinterface_call_param_list : interface_call_param
| interface_call_param_list COMMA interface_call_param
Nr   rs   rL   rM   p_interface_call_param_listr     s5     1v{!v!tqtf}!rO   c                sd    \         P                  ! V ^,          4      pV ^,          Vn        W^ &   R# )zRobj_perm_set : DEFINE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK names SQUOTE CPARENN)r   Z
ObjPermSetpermsrt   rk   r   rM   p_obj_perm_setr     s(    QqT"AdAGaDrO   c                rv   )zWpolicy : policy_stmt
| optional_policy
| tunable_policy
| ifdef
| ifelse
| conditional
NrI   rs   rL   rM   p_policyr     rx   rO   c                sB    V ^,          '       d   V ^,          .V ^ &   R# R# )a  policy_stmt : gen_require
| avrule_def
| typerule_def
| typebound_def
| typeattribute_def
| roleattribute_def
| interface_call
| role_def
| role_allow
| permissive
| type_def
| typealias_def
| attribute_def
| attribute_role_def
| range_transition_def
| role_transition_def
| bool
| gen_tunable
| define
| initial_sid
| genfscon
| fs_use
| portcon
| nodecon
| netifcon
| pirqcon
| iomemcon
| ioportcon
| pcidevicecon
| devicetreecon
NrI   rs   rL   rM   p_policy_stmtr     s"    @ 	tt!v! rO   c                s~    \         P                  ! 4       pV ^,          Vn        V ^,          Vn        RVn         W^ &   R# )z+module_stmt : MODULE IDENTIFIER NUMBER SEMIFNr|   r~   r   rM   p_module_stmtr   5  s4    ##%AqTAF!AIAKaDrO   c                ry   )zYgen_require : GEN_REQ OPAREN TICK requires SQUOTE CPAREN
| REQUIRE OBRACE requires CBRACENrI   rs   rL   rM   p_gen_requirer   =  s     	rO   c                ry   )zZrequires : require
| requires require
| ifdef
| requires ifdef
| ifelse
| requires ifelse
NrI   rs   rL   rM   
p_requiresr   E       	rO   c                ry   )zrequire : TYPE comma_list SEMI
| ROLE comma_list SEMI
| ATTRIBUTE comma_list SEMI
| ATTRIBUTE_ROLE comma_list SEMI
| CLASS comma_list SEMI
| BOOL comma_list SEMI
NrI   rs   rL   rM   	p_requirer   O  r   rO   c                s    \         P                  ! 4       pV ^,          Vn        V ^,          Vn        V ^,          Vn        \        V 4      ^8  d   V ^,          Vn        W^ &   R# )zsecurity_context : IDENTIFIER COLON IDENTIFIER COLON IDENTIFIER
| IDENTIFIER COLON IDENTIFIER COLON IDENTIFIER COLON mls_range_defN)r   ZSecurityContextZuserr@   r>   rd   levelr   r   rM   p_security_contextr   Y  sP     	!!#AqTAFqTAFqTAF
1vzA$aDrO   c                s<    V ^,          pV ^,          Vn         W^ &   R# )zQgen_context : GEN_CONTEXT OPAREN security_context COMMA mls_range_def CPAREN
    N)r   r   r   rM   p_gen_contextr   f  s     	
!AdAGaDrO   c                rv   )z)context : security_context
| gen_context
NrI   rs   rL   rM   	p_contextr   q       Q4AaDrO   c                p    \         P                  ! 4       pV ^,          Vn        V ^,          Vn        W^ &   R# )z$initial_sid : SID IDENTIFIER contextN)r   Z
InitialSidr}   contextr   r   rM   p_initial_sidr   w  s-    AqTAF!AIaDrO   c                s    \         P                  ! 4       pV ^,          Vn        V ^,          Vn        \	        V 4      ^8X  d   V ^,          Vn        MV ^,          Vn        W^ &   R# )zgenfscon : GENFSCON IDENTIFIER PATH context
| GENFSCON IDENTIFIER PATH MINUS IDENTIFIER context
| GENFSCON IDENTIFIER PATH MINUS MINUS context
N)r   ZGenfsCon
filesystempathrd   r   )rt   Zgr   rM   
p_genfsconr   ~  sP    
 	AQ4ALqTAF
1v{aD	aD	aDrO   c                s   \         P                  ! 4       pV ^,          R8X  d!   \         P                  P                  Vn        M[V ^,          R8X  d!   \         P                  P                  Vn        M-V ^,          R8X  d    \         P                  P
                  Vn        V ^,          Vn        V ^,          Vn        W^ &   R# )z{fs_use : FS_USE_XATTR IDENTIFIER context SEMI
| FS_USE_TASK IDENTIFIER context SEMI
| FS_USE_TRANS IDENTIFIER context SEMI
r;   r=   r<   N)r   ZFilesystemUseZXATTRr>   ZTASKZTRANSr   r   )rt   fr   rM   p_fs_user     s    
 	!At~((..	
1	((--	
1	((..Q4AL!AIaDrO   c                s   \         P                  ! 4       pV ^,          Vn        \        V 4      ^8X  d   V ^,          Vn        V ^,          Vn        M1V ^,          R,           V ^,          ,           Vn        V ^,          Vn        W^ &   R# )z\portcon : PORTCON IDENTIFIER NUMBER context
| PORTCON IDENTIFIER NUMBER MINUS NUMBER contextr   N)r   ZPortConZ	port_typerd   Zport_numberr   rt   Zcr   rM   	p_portconr     sh     	AA$AK
1v{!aD	!s
QqT)aD	aDrO   c                    \         P                  ! 4       pV ^,          Vn        V ^,          Vn        V ^,          Vn        W^ &   R# )zNnodecon : NODECON NUMBER NUMBER context
| NODECON IPV6_ADDR IPV6_ADDR context
N)r   ZNodeConstartZendr   rt   Znr   rM   	p_nodeconr     s:     	AdAGaDAE!AIaDrO   c                r   )z.netifcon : NETIFCON IDENTIFIER context contextN)r   ZNetifConrG   Zinterface_contextZpacket_contextr   r   rM   
p_netifconr     s:    AA$AKA$AtAaDrO   c                r   )z pirqcon : PIRQCON NUMBER contextN)r   ZPirqConZpirq_numberr   r   r   rM   	p_pirqconr     s-    AaDAM!AIaDrO   c                    \         P                  ! 4       p\        V 4      ^8X  d   V ^,          Vn        V ^,          Vn        M1V ^,          R,           V ^,          ,           Vn        V ^,          Vn        W^ &   R# )zIiomemcon : IOMEMCON NUMBER context
| IOMEMCON NUMBER MINUS NUMBER contextr   N)r   ZIomemConrd   Z
device_memr   r   r   rM   
p_iomemconr     s]     	A
1v{taD	tczAaD(aD	aDrO   c                r   )zLioportcon : IOPORTCON NUMBER context
| IOPORTCON NUMBER MINUS NUMBER contextr   N)r   Z	IoportConrd   Zioportr   r   r   rM   p_ioportconr     s]     	A
1v{Q4aD	Q4#:!$aD	aDrO   c                r   )z*pcidevicecon : PCIDEVICECON NUMBER contextN)r   ZPciDeviceConZdevicer   r   r   rM   p_pcideviceconr     s-     AtAH!AIaDrO   c                r   )z,devicetreecon : DEVICETREECON NUMBER contextN)r   ZDevicetTeeConr   r   r   r   rM   p_devicetreeconr     s-    !AqTAF!AIaDrO   c                s    V ^,          V ^ &   \        V 4      ^8  d$   V ^ ,          R,           V ^,          ,           V ^ &   R# R# )zBmls_range_def : mls_level_def MINUS mls_level_def
| mls_level_def
r   Nr   rs   rL   rM   p_mls_range_defr     s;     Q4AaD
1vztczAaD ! rO   c                s    V ^,          V ^ &   \        V 4      ^8  d3   V ^ ,          R,           RP                  V ^,          4      ,           V ^ &   R# R# )z9mls_level_def : IDENTIFIER COLON comma_list
| IDENTIFIER
Z:,N)rd   joinrs   rL   rM   p_mls_level_defr     sC     Q4AaD
1vztczCHHQqTN*! rO   c                s   \         P                  ! V ^,          4      p\        V 4      ^8X  dA   V ^,          R8X  d$   VP                  P	                  V ^,          4       M_V ^,          Vn        MP\        V 4      ^8  dA   V ^,          Vn        \        V 4      ^8X  d#   VP                  P	                  V ^,          4       W^ &   R# )ztype_def : TYPE IDENTIFIER COMMA comma_list SEMI
| TYPE IDENTIFIER SEMI
| TYPE IDENTIFIER ALIAS names SEMI
| TYPE IDENTIFIER ALIAS names COMMA comma_list SEMI
r   N)r   ZTyperd   
attributesrn   aliasesrt   rK   r   rM   
p_type_defr     s     	qtA
1v{Q43;LL!%!AI	Q!aD	q6Q;LL!%aDrO   c                H    \         P                  ! V ^,          4      pW^ &   R# )z)attribute_def : ATTRIBUTE IDENTIFIER SEMIN)r   Z	Attributert   Zar   rM   p_attribute_defr     s    AaD!AaDrO   c                r   )z3attribute_role_def : ATTRIBUTE_ROLE IDENTIFIER SEMIN)r   ZAttribute_Roler   r   rM   p_attribute_role_defr     s      1&AaDrO   c                sp    \         P                  ! 4       pV ^,          Vn        V ^,          Vn        W^ &   R# )z5typealias_def : TYPEALIAS IDENTIFIER ALIAS names SEMIN)r   Z	TypeAliasr>   r   r   r   rM   p_typealias_defr     s-    AqTAF!AIaDrO   c                s    \         P                  ! 4       pV ^,          Vn        \        V 4      ^8  d#   VP                  P                  V ^,          4       W^ &   R# )zGrole_def : ROLE IDENTIFIER TYPES comma_list SEMI
| ROLE IDENTIFIER SEMIN)r   ZRoler@   rd   rA   rn   rt   Zrr   rM   
p_role_defr   &  sA     	AqTAF
1vz	qtaDrO   c                r   )z#role_allow : ALLOW names names SEMIN)r   Z	RoleAllowZ	src_rolesZ	tgt_rolesr   r   rM   p_role_allowr   /  s-    AA$AKA$AKaDrO   c                ry   )z"permissive : PERMISSIVE names SEMINrI   rs   rL   rM   p_permissiver   6  r{   rO   c                s   \         P                  ! 4       pV ^,          R8X  d!   \         P                  P                  Vn        M[V ^,          R8X  d!   \         P                  P                  Vn        M-V ^,          R8X  d    \         P                  P
                  Vn        V ^,          Vn        V ^,          Vn        V ^,          Vn        V ^,          Vn	        W^ &   R# )zavrule_def : ALLOW names names COLON names names SEMI
| DONTAUDIT names names COLON names names SEMI
| AUDITALLOW names names COLON names names SEMI
| NEVERALLOW names names COLON names names SEMI
rB   rC   rD   N)
r   AVRuler%   	rule_typer&   r'   	src_types	tgt_typesobj_classesr   r   r   rM   p_avrule_defr   :  s     	At{&&00	
1	&&11	
1	&&11A$AKA$AKaDAMdAGaDrO   c                sz   \         P                  ! 4       pV ^,          R8X  d!   \         P                  P                  Vn        M-V ^,          R8X  d    \         P                  P                  Vn        V ^,          Vn        V ^,          Vn        V ^,          Vn        V ^,          Vn        V ^,          Vn	        W^ &   R# )a;  typerule_def : TYPE_TRANSITION names names COLON names IDENTIFIER SEMI
| TYPE_TRANSITION names names COLON names IDENTIFIER FILENAME SEMI
| TYPE_TRANSITION names names COLON names IDENTIFIER IDENTIFIER SEMI
| TYPE_CHANGE names names COLON names IDENTIFIER SEMI
| TYPE_MEMBER names names COLON names IDENTIFIER SEMI
rE   rF   N)
r   ZTypeRuler+   r   r,   r   r   r   Z	dest_typeZ	file_namer   r   rM   p_typerule_defr   M  s     	At}((44	
1	((44A$AKA$AKaDAMA$AKA$AKaDrO   c                    \         P                  ! 4       pV ^,          Vn        VP                  P	                  V ^,          4       W^ &   R# )z5typebound_def : TYPEBOUNDS IDENTIFIER comma_list SEMIN)r   Z	TypeBoundr>   r   rn   r   r   rM   p_typebound_defr   `  s8    AqTAFKKqtaDrO   c                s    \         P                  ! 4       pV ^,          Vn        V ^,          R8X  d	   RVn        MRVn        W^ &   R# )z=bool : BOOL IDENTIFIER TRUE SEMI
| BOOL IDENTIFIER FALSE SEMIr?   TFN)r   Boolr}   state)rt   br   rM   p_boolr   g  s;     	AqTAFtv~aDrO   c                s    \         P                  ! 4       p\        V 4      ^8X  d   ^p^pM^p^pW,          Vn        W,          R8X  d	   RVn        MRVn        W^ &   R# )zgen_tunable : GEN_TUNABLE OPAREN IDENTIFIER COMMA TRUE CPAREN
| GEN_TUNABLE OPAREN IDENTIFIER COMMA FALSE CPAREN
| GEN_TUNABLE OPAREN TICK IDENTIFIER SQUOTE COMMA TRUE CPAREN
| GEN_TUNABLE OPAREN TICK IDENTIFIER SQUOTE COMMA FALSE CPARENr?   TFN)r   r   rd   r}   r   )rt   r   Zid_posZ	state_poss   &   rM   p_gen_tunabler   r  sW    
 	A
1v{		YAF|vaDrO   c                s    \         P                  ! 4       pV ^,          Vn        \        V ^,          VRR7       \	        V 4      ^8  d   \        V ^
,          VRR7       V.V ^ &   R# )zconditional : IF OPAREN cond_expr CPAREN OBRACE interface_stmts CBRACE
| IF OPAREN cond_expr CPAREN OBRACE interface_stmts CBRACE ELSE OBRACE interface_stmts CBRACE
Tr   FN)r   ZConditionalr   rl   rd   r   r   rM   p_conditionalr     sS     	AA$AKAaD!
1vz"qe$3AaDrO   c                r   )z<typeattribute_def : TYPEATTRIBUTE IDENTIFIER comma_list SEMIN)r   ZTypeAttributer>   r   rn   r   r   rM   p_typeattribute_defr     s8    !AqTAFLL!aDrO   c                r   )z<roleattribute_def : ROLEATTRIBUTE IDENTIFIER comma_list SEMIN)r   ZRoleAttributer@   Zroleattributesrn   r   r   rM   p_roleattribute_defr     s:    !AqTAFAaD!aDrO   c                ry   )z|range_transition_def : RANGE_TRANSITION names names COLON names mls_range_def SEMI
| RANGE_TRANSITION names names names SEMINrI   rs   rL   rM   p_range_transition_defr          	rO   c                ry   )z<role_transition_def : ROLE_TRANSITION names names names SEMINrI   rs   rL   rM   p_role_transition_defr     r{   rO   c                s    \        V 4      pV^8X  d   V ^,          .V ^ &   R# V^8X  d   V ^,          .V ^,          ,           V ^ &   R# V ^,          V ^,          V ^,          ,           .,           V ^,          ,           V ^ &   R# )zcond_expr : IDENTIFIER
| EXPL cond_expr
| cond_expr AMP AMP cond_expr
| cond_expr BAR BAR cond_expr
| cond_expr EQUAL EQUAL cond_expr
| cond_expr EXPL EQUAL cond_expr
Nr   )rt   Zlr   rM   p_cond_exprr     sj     	AAAv!v!	
a!v!}!tqtad{m#ad*!rO   c                s:   \         P                  ! 4       p\        V 4      ^8  d   \        V ^,          V4       M]\        V 4      ^8X  d   \        V ^,          V4       RVn        M2\        V ^,          .4       VP                  RV ^,          ,           4       W^ &   R# )zunames : identifier
| nested_id_set
| asterisk
| TILDE identifier
| TILDE nested_id_set
| IDENTIFIER MINUS IDENTIFIER
Tr   N)r   ZIdSetrd   rp   Z
complimentro   r   r   rM   p_namesr     so     	A
1vzqtQ	Q1qtQ!v	cAaDjaDrO   c                     V ^,          .V ^ &   R# )zidentifier : IDENTIFIERNrI   rs   rL   rM   p_identifierr         aD6AaDrO   c                r   )zasterisk : ASTERISKNrI   rs   rL   rM   
p_asteriskr     r   rO   c                s    V ^,          V ^ &   R# )z1nested_id_set : OBRACE nested_id_list CBRACE
    NrI   rs   rL   rM   p_nested_id_setr     s     Q4AaDrO   c                sv    \        V 4      ^8X  d   V ^,          V ^ &   R# V ^,          V ^,          ,           V ^ &   R# )zFnested_id_list : nested_id_element
| nested_id_list nested_id_element
Nr   rs   rL   rM   p_nested_id_listr     s1     1v{t!tad{!rO   c                sn    \        V 4      ^8X  d   V ^,          V ^ &   R# RV ^,          ,           pV.V ^ &   R# )zBnested_id_element : identifier
| MINUS IDENTIFIER
| nested_id_set
r   Nr   )rt   strr   rM   p_nested_id_elementr     s6    
 1v{t! AaDju!rO   c                sr    \        V 4      ^8  d   V ^,          V ^,          ,           V ^&   V ^,          V ^ &   R# )z>comma_list : nested_id_list
| comma_list COMMA nested_id_list
Nr   rs   rL   rM   p_comma_listr     s1     1vztad{!Q4AaDrO   c                ry   )zoptional_semi : SEMI
| emptyNrI   rs   rL   rM   p_optional_semir     r   rO   c                rv   )z9quoted_filename : TICK quoted_filename SQUOTE
| FILENAME
NrI   rs   rL   rM   p_quoted_filenamer     r   rO   c                 s    R \         V P                  V P                  V P                  3,          s\        \        4       RsR# )z(%s: Syntax error on line %d %s [type=%s]FN)
parse_filerS   r]   r>   errorrb   success)ZtokrL   rM   p_errorr     s3    6*cjjRUR[R[]`]e]e9ffE	%LGrO   c                 sL    V '       g   / # / pV  F  pW!VP                   &   K  	  R # rg   )r}   )rm   Zmapr   r   rM   prep_sptr     s$    

CAFF rO   c                 s    \         '       g/   \        P                  ! 4       s\        P                  ! R V^ R7      s V e   V sM\
        P                  ! 4       sV'       g   \
        P                  ! 4       sR# VsR# )ZLALR)ZmethoddebugZwrite_tablesN)	parserr   rR   r   rq   r   ModuleSupportMacrosrm   )r:   supportr   s   &&&rM   create_globalsr     sU     6	&AF%%'rO   c                 sb   \        WV4       ^\        n        Rs \        P                  W\        R7       \        '       g   RsR\        ,          p\        V4      h\        #   \         dB   pRsRsR\        T4      ,          R,           \        P                  ! 4       ,           s
 Rp?LsRp?ii ; i)   T)r   rR   Nzinternal parser error: %s
zcould not parse text: "%s")r   rR   rS   r   r   parseZ	Exceptionr   	tracebackZ
format_excr   
ValueErrorrq   )Ztextr:   r   r   emsgs   &&&&  rM   r   r   0  s    6E* ELGUTe4 7*U2oH  U+c!f4t;i>R>R>TTUs   A" "B.-7B))B.c           	      s   . pR p\         P                  ! V 4       F  w  r4pV F  p\         P                  P                  V4      p\         P                  P	                  W64      pV^,          R8X  dW   VR8X  d   TpKZ  \        \        P                  ! RV^ ,          4      4      '       d   VP                  V^ ,          V34       K  K  V^,          R8X  g   K  VP                  V^ ,          V34       K  	  K  	  W3# )Nz.sptzobj_perm_sets.sptZpatternsz.if)	osZwalkr   splitextr   rd   reZfindallrr   )	rootmodulessupport_macrosZdirpathZdirnamesZ	filenamesr}   modnameZfilenames	   &        rM   list_headersr	  E  s    GN(*$9Dgg&&t,Gww||G2HqzV#..%-NJ
;<<NNGAJ#9: =u$
H56  )6 $$rO   c                 s  aaa ^RI Hp \        P                  ! 4       p. pRp\        P
                  P                  V 4      '       d   \        P
                  P                  V 4      ^,          pVR8X  d   \        RV ,          4      h\        P
                  P                  V4      p	VP                  V	^ ,          V 34       \        \        P                  ! 4       4      w  rM\        V 4      w  rgV'       d   V'       g   \        R4      hV3R loRVV3R llpRpV'       d   S! RV,          4       \        P                  ! 4       pV! W|4       VP                  P                  V4       \        P                   ! R	4      p\"        P$                  ! . RO4      pVP                  P                  \        P&                  ! V4      4       VP                  P                  V4       S! R
4       S'       dD   S'       g<   VP)                  \*        P,                  \/        V4      R7      pVP1                  R4       . pV F  p\        P2                  ! 4       pV^ ,          Vn         V'       d   V! V^,          VV4       MV! V^,          V4        VP                  P                  V4       S'       g   Kw  S'       d   K  XP9                  4        K  	  \/        V4      '       d   S! RRP;                  V4      ,          4       V#   \         d=   pS! \7        T4      R,           4       TP                  T^,          4        Rp?EK  Rp?ii ; i)r   )utilNrf   zInvalid file name %sz1could not find support macros (obj_perm_sets.spt)c                 s>   < S'       d   SP                  V 4       R # R # rg   )Zwrite)r  outputs   &rM   r   Zparse_headers.<locals>.on  s    LL rO   c           	      s2  < S'       d   S! R V ,          4        \        V 4      pVP                  4       pVP                  4        V s\	        WAVS4       R#   \
         d   p Rp?R# Rp?i\         d"   p\        RT : R\        T4      : 24      hRp?ii ; i)zparsing file %s
Nzerror parsing file z: )openreadZcloser   r   ZIOErrorr   r   )r   r:   rm   ZfdZtxtr   r   r   s   &&&   rM   r   Z!parse_headers.<locals>.parse_filer  sz    !A%&		HaB'')CHHJJ#sE* 	 	HAs1vFGG	Hs#   :A B'B4B5BBzParsing support macros (%s): can_execzdone.
)ZstepszParsing interface filesr   z!failed to parse some headers: %s
z, rg   )
z$1z$2ZfileZexecute_no_transr  r  ZgetattrZlockZexecuteZioctl)rf   r
  r   ZHeadersr  r   ZisfileZsplitr   r  rr   r	  r   headersr   ri   r   r    ZAccessVectorr   ZConsoleProgressBarsysZstdoutrd   r   r   r}   r   Zstepr   )r  r  rp   r   r
  r  r  r  r}   r  Zall_modulesr   rm   r  ZavZstatusZfailuresr   rq   r   r   s   &f&f                @rM   parse_headersr  Y  sx   !GGN	ww~~dww}}T"1%2:3d:;;''""4(
D)*&283C3C3E&F#^".t"4nLMMH H C	
)N
:;%%'>'$
 &&z2   "F G 	  !1!1"!56)	)e((3w<(H./H1	1Q4C(1Q4# 	"6%%KKM " 8}}	
.81D
DEN  	c!ftmOOAaD!	s   K>9K>>M	0M  M)JZTICKZSQUOTEZOBRACEZCBRACEZSEMIZCOLONZOPARENZCPARENZCOMMAZMINUSZTILDEZASTERISKZAMPZBARZEXPLZEQUALr_   rZ   ZNUMBERZPATHZ	IPV6_ADDRr   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   rg   )NNF)NTF){r  r  r  r   rf   r    r   r   r   r   Ztokensr\   Zt_TICKZt_SQUOTEZt_OBRACEZt_CBRACEZt_SEMIZt_COLONZt_OPARENZt_CPARENZt_COMMAZt_MINUSZt_TILDEZ
t_ASTERISKZt_AMPZt_BARZt_EXPLZt_EQUALZt_NUMBERZt_PATHZt_ignorerN   rT   rW   rX   r^   r`   ra   rc   re   rq   r   r   rm   r   rl   rp   ru   rw   rz   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   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rR   r   r   r	  r  rI   rO   rM   <module>r     s  @  	 	      V
t?x? o? 		? 
E? ? ^? ^? M? 	? 	? ? 	? ?  +!?" ^#?$ o%?( g)?, o-?. o/?0 V1?2 +3?4 '5?6 g7?8 +9?< V=?> V??@ gA?B 	4C?D VE?H VI?J gK?N gO?P +Q?R <S?T <U?V <W?X <Y?Z )[?\ M]?^ M_?` +a?b )c?f g?h +i?j 'k?l Im?n o?p Mq?r Ms?v xw?x xy?z gx}?J 
'
 

# 	
 

) 	 	
"$!F				$	!+$

	&&	&		
	+:&

	
 
"*%(UrO   