+
    i0                       R t ^ RIHt ^ RIHt ]'       g   R]9   d   ^RIH	t	 M^ RI	t	 ^ RI
tR tR tR tR	 t ! R
 R]4      t^ RIt]	P(                  t^ RIHtHtHt ^ RItR R ltR R lt ! R R]4      t]	P<                  ! ]4       ]	P>                  t]P@                  t  ]PB                  t! ]PD                  t" ]PF                  t# ]PH                  t$ ]PJ                  t% ]PL                  t& ]PN                  t' ]PP                  t( ]PR                  t) ]PT                  t* ]PV                  t+ ]PX                  t, ]PZ                  t- ]P\                  t. ]P^                  t/ ]P`                  t0 ]Pb                  t1 ]Pd                  t2 R R lt3R R lt4R R lt5R R lt6R R lt7R R lt8R R  lt9R! R" lt:R# R$ lt;R% R& lt<R' R( lt=R) R* lt>R+ R, lt?R- R. lt@R/ R0 ltAR1 R2 ltBR3 R4 ltCR5 R6 ltDRMR7 R8 lltER9 R: ltFR; R< ltGR= R> ltHR? R@ ltIRA RB ltJRC RD ltKRE RF ltLRG RH ltMRI RJ ltNRK RL ltOR#   ] d	    ^ RIt EL!i ; i)Na  Functions that work with the autoanalyzer queue.

The autoanalyzer works when IDA is not busy processing the user keystrokes.
It has several queues, each queue having its own priority. The analyzer stops
when all queues are empty.

A queue contains addresses or address ranges. The addresses are kept sorted by
their values. The analyzer will process all addresses from the first queue,
then switch to the second queue and so on. There are no limitations on the
size of the queues.

This file also contains functions that deal with the IDA status indicator and
the autoanalysis indicator. You may use these functions to change the
indicator value.

.. tip::
   The `IDA Domain API <https://ida-domain.docs.hex-rays.com/>`_ simplifies
   common tasks and provides better type hints, while remaining fully compatible
   with IDAPython for advanced use cases.

   For auto-analysis operations, see :mod:`ida_domain.database`.)annotations)version_info.)	_ida_autoNc                     R V P                   P                  4       ,           pRV P                  P
                  : RV P                  P                  : RV: R2#   \        P                   d    Rp LPi ; i)z	proxy of  <r   z; z >)this__repr____builtin__	Exception	__class__
__module____name__)selfstrthiss   & @C:\Users\user\Downloads\ida93sp2\portable_win\python\ida_auto.py
_swig_reprr   "   sg    		 2 2 44 "^^669     s   !A A43A4c                   a  V 3R  lpV# )c                  < VR 8X  d   S! WV4       R# VR8X  d   V P                   P                  V4       R# \        W4      '       d5   \        \	        \        V 4      V4      \        4      '       d   S! WV4       R# \        RV ,          4      h)r	   thisownz(You cannot add instance attributes to %sN)r	   ownhasattr
isinstancegetattrtypepropertyAttributeError)r   namevaluesets   &&&r   set_instance_attrE_swig_setattr_nondynamic_instance_variable.<locals>.set_instance_attr-   su    6>E"YIIMM% T  ZT
D0I& &E" !K"       )r    r!   s   f r   *_swig_setattr_nondynamic_instance_variabler%   +   s    
 r#   c                   a  V 3R  lpV# )c                   < \        W4      '       d+   \        \        W4      \        4      '       g   S! WV4       R# \	        R V ,          4      h)z%You cannot add class attributes to %sN)r   r   r   r   r   )clsr   r   r    s   &&&r   set_class_attr?_swig_setattr_nondynamic_class_variable.<locals>.set_class_attr=   s:    3j1CX&N&N5! !H3!NOOr#   r$   )r    r)   s   f r   '_swig_setattr_nondynamic_class_variabler+   ;   s    P
 r#   c                   a  V 3R lpV# )zlClass decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclassc                p   < S! V P                   V P                  V P                  P                  4       4      # N)r   	__bases____dict__copy)r(   	metaclasss   &r   wrapper$_swig_add_metaclass.<locals>.wrapperH   s'    s}}cll6G6G6IJJr#   r$   )r2   r3   s   f r   _swig_add_metaclassr5   E   s    KNr#   c                  >    ] tR t^MtRt]! ]P                  4      tRtR# )_SwigNonDynamicMetazKMeta class to enforce nondynamic attributes (no new attributes) for a classr$   N)	r   r   __qualname____firstlineno____doc__r+   r   __setattr____static_attributes__r$   r#   r   r7   r7   M   s    U9$:J:JKKr#   r7   )TupleListUnionc                   V ^8  d   QhRR/# )   return	'atype_t'r$   )formats   "r   __annotate__rE   X   s     & &y &r#   c                 ,    \         P                  ! 4       # )zGet current state of autoanalyzer. If auto_state == AU_NONE, IDA is currently not running the analysis (it could be temporarily interrupted to perform the user's requests, for example). 
        )r   get_auto_stater$   r#   r   rG   rG   X   s     ##%%r#   c                    V ^8  d   QhRRRR/# )rA   	new_staterC   rB   r$   )rD   s   "r   rE   rE   ^   s     / /i /9 /r#   c                .    \         P                  ! V 4      # )zqSet current state of autoanalyzer. 
        
:param new_state: new state of autoanalyzer
:returns: previous state)r   set_auto_state)rI   s   &r   rK   rK   ^   s    
 ##I..r#   c                      ] tR t^ft$ ]! R R RR7      t]t]! ]P                  ]P                  4      tR]R&   ]! ]P                  ]P                  4      tR]R&   ]! ]P                   ]P"                  4      tR	]R
&   R t]P(                  tRtR# )auto_display_tc                	6    V P                   P                  4       # r.   r	   r   )xs   &r   <lambda>auto_display_t.<lambda>g   s    r#   c                	8    V P                   P                  V4      # r.   rO   )rP   vs   &&r   rQ   rR   g   s    AFFJJqMr#   zThe membership flag)docrC   r   ida_idaapi.ea_tea'idastate_t'statec                	Z    \         P                  ! V \         P                  ! 4       4       R # r.   )r   auto_display_t_swiginitnew_auto_display_t)r   s   &r   __init__auto_display_t.__init__q   s    ))$	0L0L0NOr#   r$   N)r   r   r8   r9   r   r   r   r
   r   auto_display_t_type_getauto_display_t_type_setr   __annotations__auto_display_t_ea_getauto_display_t_ea_setrW   auto_display_t_state_getauto_display_t_state_setrY   r]   delete_auto_display_t__swig_destroy__r<   r$   r#   r   rM   rM   f   s    -/I!#GHy@@)	 	 "D) ""9#B#B'')B )"9#E#E**,E< ,P 66r#   rM   c                    V ^8  d   QhRRRR/# )rA   auto_displayz'auto_display_t'rB   boolr$   )rD   s   "r   rE   rE      s     4 4#3 4t 4r#   c                .    \         P                  ! V 4      # )z?Get structure which holds the autoanalysis indicator contents.
)r   get_auto_display)ri   s   &r   rl   rl      s     %%l33r#   c                   V ^8  d   QhRR/# )rA   rB   Noner$   )rD   s   "r   rE   rE      s     & &t &r#   c                 *    \         P                  ! V !  # )zChange autoanalysis indicator value. 
        
:param ea: linear address being analyzed
:param type: autoanalysis type (see Autoanalysis queues))r   	show_auto)argss   *r   rp   rp      s    
 %%r#   c                    V ^8  d   QhRRRR/# rA   rW   rV   rB   rn   r$   )rD   s   "r   rE   rE      s     # #/ #T #r#   c                .    \         P                  ! V 4      # )zShow an address on the autoanalysis indicator. The address is displayed in the form " @:12345678". 
        
:param ea: - linear address to display)r   	show_addrrW   s   &r   ru   ru      s     r""r#   c                    V ^8  d   QhRRRR/# )rA   strX   rB   r$   )rD   s   "r   rE   rE      s     ' 'l 'l 'r#   c                .    \         P                  ! V 4      # )zlChange IDA status indicator value 
        
:param st: - new indicator status
:returns: old indicator status)r   set_ida_state)rx   s   &r   rz   rz      s    
 ""2&&r#   c                   V ^8  d   QhRR/# rA   rB   rj   r$   )rD   s   "r   rE   rE      s     * *4 *r#   c                 ,    \         P                  ! 4       # )zIs it allowed to create stack variables automatically? This function should be used by IDP modules before creating stack vars. 
        )r   may_create_stkvarsr$   r#   r   r~   r~      s     ''))r#   c                   V ^8  d   QhRR/# r|   r$   )rD   s   "r   rE   rE      s     $ $T $r#   c                 ,    \         P                  ! 4       # )z|Is it allowed to trace stack pointer automatically? This function should be used by IDP modules before tracing sp. 
        )r   may_trace_spr$   r#   r   r   r      s     !!##r#   c               (    V ^8  d   QhRRRRRRRR/# rA   startrV   endr   rC   rB   rn   r$   )rD   s   "r   rE   rE      s*     7 7? 7 777r#   c                0    \         P                  ! WV4      # )zPut range of addresses into a queue. 'start' may be higher than 'end', the kernel will swap them in this case. 'end' doesn't belong to the range. 
        )r   auto_mark_ranger   r   r   s   &&&r   r   r      s     $$U66r#   c               $    V ^8  d   QhRRRRRR/# )rA   rW   rV   r   rC   rB   rn   r$   )rD   s   "r   rE   rE      s!     ) )/ ) )d )r#   c                .    \         P                  ! W4      # )z?Put single address into a queue. Queues keep addresses sorted.
)r   	auto_mark)rW   r   s   &&r   r   r      s     r((r#   c               (    V ^8  d   QhRRRRRRRR/# r   r$   )rD   s   "r   rE   rE      s)     3 3 3_ 3I 33r#   c                0    \         P                  ! WV4      # )zRemove range of addresses from a queue. 'start' may be higher than 'end', the kernel will swap them in this case. 'end' doesn't belong to the range. 
        )r   auto_unmarkr   s   &&&r   r   r      s       T22r#   c                    V ^8  d   QhRRRR/# rs   r$   )rD   s   "r   rE   rE      s     ! ! !4 !r#   c                .    \         P                  ! V 4      # zPlan to perform reanalysis.
)r   plan_earv   s   &r   r   r      s     R  r#   c               $    V ^8  d   QhRRRRRR/# )rA   sEArV   eEArB   rn   r$   )rD   s   "r   rE   rE      s!     * *O */ *T *r#   c                .    \         P                  ! W4      # r   )r   
plan_range)r   r   s   &&r   r   r      s     ))r#   c                    V ^8  d   QhRRRR/# rs   r$   )rD   s   "r   rE   rE           ( ( ($ (r#   c                .    \         P                  ! V 4      # )zPlan to make code.
)r   auto_make_coderv   s   &r   r   r           ##B''r#   c                    V ^8  d   QhRRRR/# rs   r$   )rD   s   "r   rE   rE     r   r#   c                .    \         P                  ! V 4      # )zPlan to make code&function.
)r   auto_make_procrv   s   &r   r   r     r   r#   c                    V ^8  d   QhRRRR/# )rA   rW   rV   rB   rj   r$   )rD   s   "r   rE   rE     s     0 0 0$ 0r#   c                .    \         P                  ! V 4      # )zPlan to reanalyze on the second pass The typical usage of this function in emu.cpp is: if ( !auto_postpone_analysis(ea) ) op_offset(ea, 0, ...); (we make an offset only on the second pass) 
        )r   auto_postpone_analysisrv   s   &r   r   r     s     ++B//r#   c               $    V ^8  d   QhRRRRRR/# )rA   rW   rV   noretrj   rB   rn   r$   )rD   s   "r   rE   rE     s!     2 2/ 2$ 2$ 2r#   c                .    \         P                  ! W4      # )a>  Plan to reanalyze callers of the specified address. This function will add to AU_USED queue all instructions that call (not jump to) the specified address. 
        
:param ea: linear address of callee
:param noret: !=0: the callee doesn't return, mark to undefine subsequent instructions in the caller. 0: do nothing.)r   reanalyze_callers)rW   r   s   &&r   r   r     s    
 &&r11r#   c               $    V ^8  d   QhRRRRRR/# rA   ea1rV   ea2rB   rn   r$   )rD   s   "r   rE   rE     s!     4 4o 4O 4t 4r#   c                .    \         P                  ! W4      # )zADelete all analysis info that IDA generated for the given range.
)r   revert_ida_decisionsr   r   s   &&r   r   r     s     ))#33r#   c               $    V ^8  d   QhRRRRRR/# )rA   callerrV   calleerB   rn   r$   )rD   s   "r   rE   rE     s!     5 5O 5_ 5 5r#   c                .    \         P                  ! W4      # )z6Plan to apply the callee's type to the calling point.
)r   auto_apply_type)r   r   s   &&r   r   r     s     $$V44r#   c               $    V ^8  d   QhRRRRRR/# )rA   tail_earV   	parent_earB   rn   r$   )rD   s   "r   rE   rE   "  s"     9 9_ 9 99r#   c                .    \         P                  ! W4      # )zPlan to apply the tail_ea chunk to the parent 
        
:param tail_ea: linear address of start of tail
:param parent_ea: linear address within parent. If BADADDR, automatically try to find parent via xrefs.)r   auto_apply_tail)r   r   s   &&r   r   r   "  s     $$W88r#   c               (    V ^8  d   QhRRRRRRRR/# )rA   r   rV   r   
final_passrj   rB   intr$   )rD   s   "r   rE   rE   +  s*     9 9 9_ 999r#   c                0    \         P                  ! WV4      # )zAnalyze the specified range. Try to create instructions where possible. Make the final pass over the specified range if specified. This function doesn't return until the range is analyzed. 
        
:returns: 1: OK
:returns: 0: Ctrl-Break was pressed)r   plan_and_wait)r   r   r   s   &&&r   r   r   +  s     ""3Z88r#   c                   V ^8  d   QhRR/# r|   r$   )rD   s   "r   rE   rE   4  s     ! !$ !r#   c                 ,    \         P                  ! 4       # )zProcess everything in the queues and return true. 
        
:returns: false if the user clicked cancel. (the wait box must be displayed by the caller if desired))r   	auto_waitr$   r#   r   r   r   4  s       r#   c               $    V ^8  d   QhRRRRRR/# )rA   r   rV   r   rB   z	'ssize_t'r$   )rD   s   "r   rE   rE   ;  s!     / / / /) /r#   c                .    \         P                  ! W4      # )zProcess everything in the specified range and return true. 
        
:returns: number of autoanalysis steps made. -1 if the user clicked cancel. (the wait box must be displayed by the caller if desired))r   auto_wait_ranger   s   &&r   r   r   ;  s     $$S..r#   c               $    V ^8  d   QhRRRRRR/# )rA   r   rV   r   rB   rj   r$   )rD   s   "r   rE   rE   B  s!     . . .o . .r#   c                .    \         P                  ! W4      # )zAnalyze one address in the specified range and return true. 
        
:returns: if processed anything. false means that there is nothing to process in the specified range.)r   auto_make_stepr   s   &&r   r   r   B  s     ##C--r#   c               $    V ^8  d   QhRRRRRR/# r   r$   )rD   s   "r   rE   rE   I  s!     + +_ +? +d +r#   c                .    \         P                  ! W4      # )a  Remove an address range (ea1..ea2) from queues AU_CODE, AU_PROC, AU_USED. To remove an address range from other queues use auto_unmark() function. 'ea1' may be higher than 'ea2', the kernel will swap them in this case. 'ea2' doesn't belong to the range. 
        )r   auto_cancelr   s   &&r   r   r   I  s       **r#   c                   V ^8  d   QhRR/# r|   r$   )rD   s   "r   rE   rE   O  s     " "4 "r#   c                 ,    \         P                  ! 4       # )zBAre all queues empty? (i.e. has autoanalysis finished?). 
        )r   
auto_is_okr$   r#   r   r   r   O  s     !!r#   c               $    V ^8  d   QhRRRRRR/# )rA   low_earV   r   rC   rB   r$   )rD   s   "r   rE   rE   U  s"     3 3O 39 33r#   c                .    \         P                  ! W4      # )zPeek into a queue 'type' for an address not lower than 'low_ea'. Do not remove address from the queue. 
        
:returns: the address or BADADDR)r   peek_auto_queue)r   r   s   &&r   r   r   U  s    
 $$V22r#   c               (    V ^8  d   QhRRRRRRRR/# )rA   r   z'atype_t *'lowEArV   highEArB   r$   )rD   s   "r   rE   rE   ]  s)     3 3; 3 3 33r#   c                0    \         P                  ! WV4      # )zRetrieve an address from queues regarding their priority. Returns BADADDR if no addresses not lower than 'lowEA' and less than 'highEA' are found in the queues. Otherwise *type will have queue type. 
        )r   auto_get)r   r   r   s   &&&r   r   r   ]  s     d622r#   c                    V ^8  d   QhRRRR/# )rA   rW   rV   rB   r   r$   )rD   s   "r   rE   rE   d  s     , ,? ,c ,r#   c                .    \         P                  ! V 4      # )ztTry to create instruction 
        
:param ea: linear address of callee
:returns: the length of the instruction or 0)r   auto_recreate_insnrv   s   &r   r   r   d  s    
 ''++r#   c                   V ^8  d   QhRR/# r|   r$   )rD   s   "r   rE   rE   l  s     ' ' 'r#   c                 ,    \         P                  ! 4       # )zGet autoanalyzer state.
)r   is_auto_enabledr$   r#   r   r   r   l  s     $$&&r#   c                    V ^8  d   QhRRRR/# )rA   enablerj   rB   r$   )rD   s   "r   rE   rE   r  s     ) ) ) )r#   c                .    \         P                  ! V 4      # )zTemporarily enable/disable autoanalyzer. Not user-facing, but rather because IDA sometimes need to turn AA on/off regardless of inf.s_genflags:INFFL_AUTO 
        
:returns: old state)r   enable_auto)r   s   &r   r   r   r  s       ((r#   )T)Pr:   
__future__r   sysr   _swig_python_version_info__package__r   r   r   builtinsr   ImportErrorr   r%   r+   r5   r   r7   weakrefSWIG_PYTHON_LEGACY_BOOLtypingr=   r>   r?   
ida_idaapirG   rK   objectrM   auto_display_t_swigregistercvarAU_NONEAU_UNKAU_CODEAU_WEAKAU_PROCAU_TAIL	AU_FCHUNKAU_USEDAU_USD2AU_TYPEAU_LIBFAU_LBF2AU_LBF3AU_CHLBAU_FINALst_Readyst_Think
st_Waitingst_Workrl   rp   ru   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   <module>r      sE  D* # 9#/"
 L$ L
 #;;  % % &/7V 7  
 % %n 5~~
,,	
,,
,,
,,
,,NN	
,,
,,
,,
,,
,,
,,
,,======__

,,4&#'*$7)3!*((024599!/.+"33,')i
  s   I II