+
    i                    .   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]	P4                  t ]	P6                  t ]	P8                  t ]	P:                  t ]	P<                  t ]	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 ]	Pf                  t3 ]	Ph                  t4 ]	Pj                  t5 ]	Pl                  t6 ]	Pn                  t7 ]	Pp                  t8 ]	Pr                  t9 ]	Pt                  t: ]	Pv                  t; ]	Px                  t< ]	Pz                  t= ]	P|                  t> ]	P~                  t? ]	P                  t@ ]	P                  tA ]	P                  tB ]	P                  tC ]	P                  tD ]	P                  tE ]	P                  tF ]	P                  tG ]	P                  tH ]	P                  tI ]	P                  tJ ]	P                  tK ]	P                  tL ]	P                  tM ]	P                  tN ]	P                  tO ]	P                  tP ]	P                  tQ ]	P                  tR ]	P                  tS ]	P                  tT ]	P                  tU ]	P                  tVR R ltW ! R R]X4      tY]	P                  ! ]Y4        ! R R]X4      t[]	P                  ! ][4        ! R R]X4      t]]	P                  ! ]]4       ]	P                  t_ ]	P                  t` ]	P                  ta ]	P                  tb ]	P                  tc ]	P                  td ]	P                  te ]	P                  tf ]	P                  tg ]	P                  th ]	P                  ti  ! R R]X4      tj]	P                  ! ]j4       ]	P                  tl ]	P                  tm ]	P                  tn ]	P                  to ]	P                  tp ]	P                  tq ]	P                  tr ]	P                  ts ]	P                  tt ]	P                  tu ]	P                  tv ]	P                  tw ]	P                  tx  ! R R]X4      ty]	P                  ! ]y4        ! R R]X4      t{]	P                  ! ]{4       R#R R llt}R$R R llt~R R  ltR! R" ltR#   ] d	    ^ RIt ELei ; i)%a/  Merge functionality.

NOTE: this functionality is available in IDA Teams (not IDA Pro)
There are 3 databases involved in merging: base_idb, local_db, and remote_idb.
* base_idb: the common base ancestor of 'local_db' and 'remote_db'. in the UI this database is located in the middle.
* local_idb: local database that will contain the result of the merging. in the UI this database is located on the left.
* remote_idb: remote database that will merge into local_idb. It may reside locally on the current computer, despite its name. in the UI this database is located on the right. base_idb and remote_idb are opened for reading only. base_idb may be absent, in this case a 2-way merging is performed.


Conflicts can be resolved automatically or interactively. The automatic resolving scores the conflicting blocks and takes the better one. The interactive resolving displays the full rendered contents side by side, and expects the user to select the better side for each conflict.
Since IDB files contain various kinds of information, there are many merging phases. The entire list can be found in merge.cpp. Below are just some selected examples:
* merge global database settings (inf and other global vars)
* merge segmentation and changes to the database bytes
* merge various lists: exports, imports, loaded tils, etc
* merge names, functions, function frames
* merge debugger settings, breakpoints
* merge struct/enum views
* merge local type libraries
* merge the disassembly items (i.e. the segment contents) this includes operand types, code/data separation, etc
* merge plugin specific info like decompiler types, dwarf mappings, etc


To unify UI elements of each merge phase, we use merger views:
* A view that consists of 2 or 3 panes: left (local_idb) and right (remote_idb). The common base is in the middle, if present.
* Rendering of the panes depends on the phase, different phases show different contents.
* The conflicts are highlighted by a colored background. Also, the detail pane can be consulted for additional info.
* The user can select a conflict (or a bunch of conflicts) and say "use this block".
* The user can browse the panes as he wishes. He will not be forced to handle conflicts in any particular order. However, once he finishes working with a merge handler and proceeds to the next one, he cannot go back.
* Scrolling the left pane will synchronously scroll the right pane and vice versa.
* There are the navigation commands like "go to the prev/next conflict"
* The number of remaining conflicts to resolve is printed in the "Progress" chooser.
* The user may manually modify local database inside the merger view. For that he may use the regular hotkeys. However, editing the database may lead to new conflicts, so we better restrict the available actions to some reasonable minimum. Currently, this is not implemented.


IDA works in a new "merge" mode during merging. In this mode most events are not generated. We forbid them to reduce the risk that a rogue third-party plugin that is not aware of the "merge" mode would spoil something.
For example, normally renaming a function causes a cascade of events and may lead to other database modifications. Some of them may be desired, some - not. Since there are some undesired events, it is better to stop generating them. However, some events are required to render the disassembly listing. For example, ev_ana_insn, av_out_insn. This is why some events are still generated in the "merge" mode.
To let processor modules and plugins merge their data, we introduce a new event: ev_create_merge_handlers. It is generated immediately after opening all three idbs. The interested modules should react to this event by creating new merge handlers, if they need them.
While the kernel can create arbitrary merge handlers, modules can create only the standard ones returned by:
create_nodeval_merge_handler() create_nodeval_merge_handlers() create_std_modmerge_handlers()
We do not document merge_handler_t because once a merge handler is created, it is used exclusively by the kernel.
See mergemod.hpp for more information about the merge mode for modules.
)annotations)version_info.)
_ida_mergeNc                     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   & AC:\Users\user\Downloads\ida93sp2\portable_win\python\ida_merge.py
_swig_reprr   7   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_attrB   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_attrR   s:    3j1CX&N&N5! !H3!NOOr#   r$   )r    r)   s   f r   '_swig_setattr_nondynamic_class_variabler+   P   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>.wrapper]   s'    s}}cll6G6G6IJJr#   r$   )r2   r3   s   f r   _swig_add_metaclassr5   Z   s    KNr#   c                  >    ] tR t^bt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   b   s    U9$:J:JKKr#   r7   )TupleListUnionc                   V ^8  d   QhRR/#    returnboolr$   )formats   "r   __annotate__rF   "  s     + +4 +r#   c                 ,    \         P                  ! 4       # )zSReturn TRUE if IDA is running in diff mode (MERGE_POLICY_MDIFF/MERGE_POLICY_VDIFF)
)r   is_diff_merge_moder$   r#   r   rH   rH   "  s     ((**r#   c                  .   ] tR tRt$ ]! R R RR7      tR t]t]! ]	P                  ]	P                  4      tR]R&    ]! ]	P                  ]	P                  4      tR	]R
&    ]! ]	P"                  ]	P$                  4      tR]R&    ]! ]	P(                  ]	P*                  4      tR]R&   ]! ]	P.                  ]	P0                  4      tR]R&   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 R lt R R  lt!R! R" lt"R+R# R$ llt#R+R% R& llt$R' R( lt%R)t&R*# ),merge_data_ti(  c                	6    V P                   P                  4       # r.   r	   r   xs   &r   <lambda>merge_data_t.<lambda>)      r#   c                	8    V P                   P                  V4      # r.   rL   rN   vs   &&r   rO   rP   )      AFFJJqMr#   The membership flagdocc                	    \        R 4      h)zNo constructor defined)r   )r   argskwargss   &*,r   __init__merge_data_t.__init__,  s    566r#   z	'int [3]'	dbctx_idsintnbasesz'merge_handlers_t'ev_handlersz&'merge_data_t::item_block_locator_t *'item_block_locator'merge_handler_t *'last_udt_related_mergerc               (    V ^8  d   QhRRRRRRRR/# )rB   localr_   remotebaserC   Noner$   )rE   s   "r   rF   merge_data_t.__annotate__B  s.     P P3 P P3 P$ Pr#   c                	0    \         P                  ! WW#4      # r.   )r   merge_data_t_set_dbctx_ids)r   rf   rg   rh   s   &&&&r   set_dbctx_idsmerge_data_t.set_dbctx_idsB  s    44T&OOr#   c                   V ^8  d   QhRR/# rB   rC   r_   r$   )rE   s   "r   rF   rj   E  s     6 6 6r#   c                	.    \         P                  ! V 4      # r.   )r   merge_data_t_local_idr   s   &r   local_idmerge_data_t.local_idE  s    //55r#   c                   V ^8  d   QhRR/# rp   r$   )rE   s   "r   rF   rj   H  s     7 7# 7r#   c                	.    \         P                  ! V 4      # r.   )r   merge_data_t_remote_idrs   s   &r   	remote_idmerge_data_t.remote_idH  s    0066r#   c                   V ^8  d   QhRR/# rp   r$   )rE   s   "r   rF   rj   K  s     5 5 5r#   c                	.    \         P                  ! V 4      # r.   )r   merge_data_t_base_idrs   s   &r   base_idmerge_data_t.base_idK  s    ..t44r#   c                    V ^8  d   QhRRRR/# rB   handlerrc   rC   ri   r$   )rE   s   "r   rF   rj   N  s     H H)< H Hr#   c                	.    \         P                  ! W4      # r.   )r   merge_data_t_add_event_handlerr   r   s   &&r   add_event_handlermerge_data_t.add_event_handlerN  s    88GGr#   c                    V ^8  d   QhRRRR/# r   r$   )rE   s   "r   rF   rj   Q  s     K K,? K4 Kr#   c                	.    \         P                  ! W4      # r.   )r   !merge_data_t_remove_event_handlerr   s   &&r   remove_event_handler!merge_data_t.remove_event_handlerQ  s    ;;DJJr#   c               $    V ^8  d   QhRRRRRR/# )rB   idx'diff_source_idx_t'	item_headida_idaapi.ea_trC   r$   )rE   s   "r   rF   rj   T  s)     L L"5 LL*Lr#   c                	0    \         P                  ! WV4      # r.   )r   merge_data_t_get_block_head)r   r   r   s   &&&r   get_block_headmerge_data_t.get_block_headT  s    55dKKr#   c               (    V ^8  d   QhRRRRRRRR/# )rB   dst_idxr   src_idxregion'diff_range_t const &'rC   rD   r$   )rE   s   "r   rF   rj   X  s,      $7 %;?Cr#   c                	2    \         P                  ! WVV4      # r.   )r   merge_data_t_setup_blocks)r   r   r   r   s   &&&&r   setup_blocksmerge_data_t.setup_blocksX  s    33D7 	r#   c                    V ^8  d   QhRRRR/# )rB   nodenamestrrC   rD   r$   )rE   s   "r   rF   rj   ]  s     I I# I Ir#   c                .    \         P                  ! W4      # )z+check that node exists in any of databases
)r   merge_data_t_has_existing_node)r   r   s   &&r   has_existing_nodemerge_data_t.has_existing_node]  s     88HHr#   c               0    V ^8  d   QhRRRRRRRRRR	R
R	/# )rB   tidz	'tid_t *'ear   _fromr   tostrictrD   rC   r$   )rE   s   "r   rF   rj   b  s:      I ? !4>Br#   c                4    \         P                  ! WVW4V4      # )a  map IDs of structures, enumerations and their members 
        
:param tid: item ID in TO database
:param ea: item ID to find counterpart
:param to: destination database index, diff_source_idx_t
:param strict: raise interr if could not map
:returns: success)r   merge_data_t_map_privrange_id)r   r   r   r   r   r   s   &&&&&&r   map_privrange_idmerge_data_t.map_privrange_idb  s      772v 	r#   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	rB   tif	'tinfo_t'r   r   r   r   rD   rC   r$   )rE   s   "r   rF   rj   o  s:     O OY O/B OO%)O26Or#   c                2    \         P                  ! WW#V4      # )a  migrate type, replaces type references into FROM database to references into TO database 
        
:param tif: type to migrate, will be cleared in case of fail
:param to: destination database index, diff_source_idx_t
:param strict: raise interr if could not map
:returns: success)r   merge_data_t_map_tinfo)r   r   r   r   r   s   &&&&&r   	map_tinfomerge_data_t.map_tinfoo  s     00EvNNr#   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	rB   tif1r   diffidx1r   tif2diffidx2rC   r_   r$   )rE   s   "r   rF   rj   y  s3     & & &&#,&8K&&r#   c                2    \         P                  ! WW#V4      # )zcompare types from two databases 
        
:param tif1: type
:param diffidx1: database index, diff_source_idx_t
:param tif2: type
:param diffidx2: database index, diff_source_idx_t
:returns: -1, 0, 1)r   !merge_data_t_compare_merging_tifs)r   r   r   r   r   s   &&&&&r   compare_merging_tifs!merge_data_t.compare_merging_tifsy  s     ;;DH& 	&r#   r$   NT)'r   r   r8   r9   r   r   r\   r   r
   r   merge_data_t_dbctx_ids_getmerge_data_t_dbctx_ids_setr^   __annotations__merge_data_t_nbases_getmerge_data_t_nbases_setr`   merge_data_t_ev_handlers_getmerge_data_t_ev_handlers_setra   #merge_data_t_item_block_locator_get#merge_data_t_item_block_locator_setrb   (merge_data_t_last_udt_related_merger_get(merge_data_t_last_udt_related_merger_setrd   rm   rt   ry   r~   r   r   r   r   r   r   r   r   r<   r$   r#   r   rJ   rJ   (  s&   -/I!#G7H#J$I$I--/Iy /:==z!FC !&.z$$j&M&M'OK# OAI66
++B-> - 4<J00*00420 2P675HKL
I
O& &r#   rJ   c                  p    ] tR tRt]! R R RR7      t]tR R ltR R	 lt	]
P                  tR
 tR tRtR# )item_block_locator_ti  c                	6    V P                   P                  4       # r.   rL   rM   s   &r   rO   item_block_locator_t.<lambda>  rQ   r#   c                	8    V P                   P                  V4      # r.   rL   rS   s   &&r   rO   r     rU   r#   rV   rW   c               (    V ^8  d   QhRRRRRRRR/# )rB   md'merge_data_t'r   r   r   r   rC   r$   )rE   s   "r   rF   !item_block_locator_t.__annotate__  s+       6I "&5r#   c                	2    \         P                  ! WVV4      # r.   )r   #item_block_locator_t_get_block_head)r   r   r   r   s   &&&&r   r   #item_block_locator_t.get_block_head  s    ==d 	r#   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rB   r   r   r   r   r   r   r   rC   rD   r$   )rE   s   "r   rF   r     s3      ~ 6I )?CGr#   c                	2    \         P                  ! WVW44      # r.   )r   !item_block_locator_t_setup_blocks)r   r   r   r   r   s   &&&&&r   r   !item_block_locator_t.setup_blocks  s    ;;De 	r#   c                	    V P                   \        8X  d   R pMT p\        P                  ! V \        P                  ! V4      4       R # r.   )r   r   r   item_block_locator_t_swiginitnew_item_block_locator_tr   _selfs   & r   r\   item_block_locator_t.__init__  s>    >>11EE00z$$8%%*8, 	-r#   c                	    V P                   P                  4        \        P                  ! V 4       \        P
                  ! V 4      # r.   )r	   disownr   disown_item_block_locator_tweakrefproxyrs   s   &r   
__disown__item_block_locator_t.__disown__  s/    		..t4}}T""r#   r$   N)r   r   r8   r9   r   r   r   r
   r   r   r   delete_item_block_locator_t__swig_destroy__r\   r   r<   r$   r#   r   r   r     s<    -/I!#GH
 "==-#r#   r   c                     ] tR tRt$ ]! R R RR7      t]t]! ]P                  4      t
R]R&   ]! ]P                  ]P                  4      tR]R	&   ]! ]P                  ]P                   4      tR
]R&    ]! ]P$                  ]P&                  4      tR
]R&    ]! ]P*                  ]P,                  4      tR]R&   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 R ltR R ltR R  lt ]PB                  t"R!t#R"# )#merge_handler_params_ti  c                	6    V P                   P                  4       # r.   rL   rM   s   &r   rO   merge_handler_params_t.<lambda>  rQ   r#   c                	8    V P                   P                  V4      # r.   rL   rS   s   &&r   rO   r     rU   r#   rV   rW   z'merge_data_t &'r   r   label'merge_kind_t'kindinsert_afterr_   mh_flagsc          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rB   _mdr   _labelr   _kindr   _insert_after	_mh_flagsr_   r$   )rE   s   "r   rF   #merge_handler_params_t.__annotate__  s2      N C '5BEr#   c           
     	`    \         P                  ! V \         P                  ! WW4V4      4       R # r.   )r   merge_handler_params_t_swiginitnew_merge_handler_params_t)r   r   r   r   r   r   s   &&&&&&r   r\   merge_handler_params_t.__init__  s,    224&&:''*E: 	r#   c                   V ^8  d   QhRR/# rA   r$   )rE   s   "r   rF   r     s     M Md Mr#   c                2    \         P                  ! V .VO5!  # )zThis function has the following signatures:

    0. ui_has_details() -> bool
    1. ui_has_details(_mh_flags: int) -> bool

# 0: ui_has_details() -> bool


# 1: ui_has_details(_mh_flags: int) -> bool

Should IDA display the diffpos detail pane?

)r   %merge_handler_params_t_ui_has_detailsr   rZ   s   &*r   ui_has_details%merge_handler_params_t.ui_has_details  s     ??LtLLr#   c                   V ^8  d   QhRR/# rA   r$   )rE   s   "r   rF   r     s      $ r#   c                2    \         P                  ! V .VO5!  # )a  This function has the following signatures:

    0. ui_complex_details() -> bool
    1. ui_complex_details(_mh_flags: int) -> bool

# 0: ui_complex_details() -> bool


# 1: ui_complex_details(_mh_flags: int) -> bool

Do not display the diffpos details in the chooser. For example, the MERGE_KIND_SCRIPTS handler puts the script body as the diffpos detail. It would not be great to show them as part of the chooser. 
        
)r   )merge_handler_params_t_ui_complex_detailsr  s   &*r   ui_complex_details)merge_handler_params_t.ui_complex_details  s      CCD 4  	r#   c                   V ^8  d   QhRR/# rA   r$   )rE   s   "r   rF   r          N Nt Nr#   c                2    \         P                  ! V .VO5!  # )ab  This function has the following signatures:

    0. ui_complex_name() -> bool
    1. ui_complex_name(_mh_flags: int) -> bool

# 0: ui_complex_name() -> bool


# 1: ui_complex_name(_mh_flags: int) -> bool

It customary to create long diffpos names having many components that are separated by any 7-bit ASCII character (besides of '\0'). In this case it is possible to instruct IDA to use this separator to create a multi-column chooser. For example the MERGE_KIND_ENUMS handler has the following diffpos name: enum_1,enum_2 If MH_UI_COMMANAME is specified, IDA will create 2 columns for these names. 
        
)r   &merge_handler_params_t_ui_complex_namer  s   &*r   ui_complex_name&merge_handler_params_t.ui_complex_name       @@MMMr#   c                   V ^8  d   QhRR/# )rB   rC   z'char'r$   )rE   s   "r   rF   r     s     L LV Lr#   c                2    \         P                  ! V .VO5!  # )zThis function has the following signatures:

    0. ui_split_char() -> char
    1. ui_split_char(_mh_flags: int) -> char

# 0: ui_split_char() -> char


# 1: ui_split_char(_mh_flags: int) -> char

)r   $merge_handler_params_t_ui_split_charr  s   &*r   ui_split_char$merge_handler_params_t.ui_split_char  s     >>tKdKKr#   c                   V ^8  d   QhRR/# )rB   rC   r   r$   )rE   s   "r   rF   r     s     K KC Kr#   c                2    \         P                  ! V .VO5!  # )zThis function has the following signatures:

    0. ui_split_str() -> str
    1. ui_split_str(_mh_flags: int) -> str

# 0: ui_split_str() -> str


# 1: ui_split_str(_mh_flags: int) -> str

)r   #merge_handler_params_t_ui_split_strr  s   &*r   ui_split_str#merge_handler_params_t.ui_split_str  s     ==dJTJJr#   c                   V ^8  d   QhRR/# rA   r$   )rE   s   "r   rF   r     r  r#   c                2    \         P                  ! V .VO5!  # )a  This function has the following signatures:

    0. ui_dp_shortname() -> bool
    1. ui_dp_shortname(_mh_flags: int) -> bool

# 0: ui_dp_shortname() -> bool


# 1: ui_dp_shortname(_mh_flags: int) -> bool

The detail pane shows the diffpos details for the current diffpos range as a tree-like view. In this pane the diffpos names are used as tree node names and the diffpos details as their children. Sometimes, for complex diffpos names, the first part of the name looks better than the entire name. For example, the MERGE_KIND_SEGMENTS handler has the following diffpos name: <range>,<segm1>,<segm2>,<segm3> if MH_UI_DP_SHORTNAME is specified, IDA will use <range> as a tree node name 
        
)r   &merge_handler_params_t_ui_dp_shortnamer  s   &*r   ui_dp_shortname&merge_handler_params_t.ui_dp_shortname  r  r#   c                   V ^8  d   QhRR/# rA   r$   )rE   s   "r   rF   r   "  s     J J4 Jr#   c                2    \         P                  ! V .VO5!  # )a  This function has the following signatures:

    0. ui_linediff() -> bool
    1. ui_linediff(_mh_flags: int) -> bool

# 0: ui_linediff() -> bool


# 1: ui_linediff(_mh_flags: int) -> bool

In detail pane IDA shows difference between diffpos details. IDA marks added or deleted detail by color. In the modified detail the changes are marked. Use this UI hint if you do not want to show the differences inside detail. 
        
)r   "merge_handler_params_t_ui_linediffr  s   &*r   ui_linediff"merge_handler_params_t.ui_linediff"  s     <<TIDIIr#   c                   V ^8  d   QhRR/# rA   r$   )rE   s   "r   rF   r   2  s     H H Hr#   c                2    \         P                  ! V .VO5!  # )aF  This function has the following signatures:

    0. ui_indent() -> bool
    1. ui_indent(_mh_flags: int) -> bool

# 0: ui_indent() -> bool


# 1: ui_indent(_mh_flags: int) -> bool

In the ordinary situation the spaces from the both sides of diffpos name are trimmed. Use this UI hint to preserve the leading spaces. 
        
)r    merge_handler_params_t_ui_indentr  s   &*r   	ui_indent merge_handler_params_t.ui_indent2  s     ::4G$GGr#   r$   N)$r   r   r8   r9   r   r   r   r
   r   merge_handler_params_t_md_getr   r    merge_handler_params_t_label_get merge_handler_params_t_label_setr   merge_handler_params_t_kind_getmerge_handler_params_t_kind_setr   'merge_handler_params_t_insert_after_get'merge_handler_params_t_insert_after_setr   #merge_handler_params_t_mh_flags_get#merge_handler_params_t_mh_flags_setr   r\   r  r	  r  r  r  r  r$  r)  delete_merge_handler_params_tr   r<   r$   r#   r   r   r     s   -/I!#GH#J$L$LMBM*EE335E3 5#J'''')D. )#+J////$1L. 1ZKK668Hc 8M "N LKN J H "??r#   r   c                     ] tR tRt$ ]! 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
&    ]! ]P&                  ]P(                  4      tR]R&    ]! ]P,                  ]P.                  4      tR]R&    R R lt]P4                  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 t"Rt#R# )moddata_diff_helper_tih  c                	6    V P                   P                  4       # r.   rL   rM   s   &r   rO   moddata_diff_helper_t.<lambda>i  rQ   r#   c                	8    V P                   P                  V4      # r.   rL   rS   s   &&r   rO   r8  i  rU   r#   rV   rW   r   module_namenetnode_namez'idbattr_info_t const *'fieldsr_   nfieldsadditional_mh_flagsc               $    V ^8  d   QhRRRRRR/# )rB   _module_namer   _netnode_name_fields'idbattr_info_t'r$   )rE   s   "r   rF   "moddata_diff_helper_t.__annotate__  s"      S  r#   c           	     	    V P                   \        8X  d   R pMT p\        P                  ! V \        P                  ! WAVV4      4       R # r.   )r   r6  r   moddata_diff_helper_t_swiginitnew_moddata_diff_helper_t)r   r@  rA  rB  r   s   &&&& r   r\   moddata_diff_helper_t.__init__  sC    >>22EE11$
%%9&&+=9 	r#   c               $    V ^8  d   QhRRRRRR/# rB   arg0r   arg1'void *'rC   ri   r$   )rE   s   "r   rF   rD    s"      #6 h $ r#   c                	0    \         P                  ! WV4      # r.   )r   $moddata_diff_helper_t_merge_startingr   rK  rL  s   &&&r   merge_starting$moddata_diff_helper_t.merge_starting  s    >>t4  	r#   c               $    V ^8  d   QhRRRRRR/# rJ  r$   )rE   s   "r   rF   rD    s'     O O!4 OH O Or#   c                	0    \         P                  ! WV4      # r.   )r   "moddata_diff_helper_t_merge_endingrP  s   &&&r   merge_ending"moddata_diff_helper_t.merge_ending  s    <<TNNr#   c               (    V ^8  d   QhRRRRRRRR/# )	rB   rK  r   rL  r   arg2rC  rC   rM  r$   )rE   s   "r   rF   rD    s+      . 8K "*r#   c                	0    \         P                  ! WW#4      # r.   )r   #moddata_diff_helper_t_get_struc_ptrr   rK  rL  rY  s   &&&&r   get_struc_ptr#moddata_diff_helper_t.get_struc_ptr  s    ==d 	r#   c               $    V ^8  d   QhRRRRRR/# )rB   rK  'qstrvec_t *'rL  rC  rC   ri   r$   )rE   s   "r   rF   rD    s#      - ?O r#   c                	0    \         P                  ! V W4      # r.   )r   +moddata_diff_helper_t_print_diffpos_detailsrP  s   &&&r   print_diffpos_details+moddata_diff_helper_t.print_diffpos_details  s    EEd 	r#   c               (    V ^8  d   QhRRRRRRRR/# )	rB   rK  r   rL  rC  rY  z'uint64'rC   rD   r$   )rE   s   "r   rF   rD    s0     P PC P'7 Px PPr#   c                	0    \         P                  ! WW#4      # r.   )r   moddata_diff_helper_t_val2strr\  s   &&&&r   val2strmoddata_diff_helper_t.val2str      77DOOr#   c               (    V ^8  d   QhRRRRRRRR/# )	rB   rK  z
'uint64 *'rL  rC  rY  r   rC   rD   r$   )rE   s   "r   rF   rD    s0     P PJ P.> Pc PPr#   c                	0    \         P                  ! WW#4      # r.   )r   moddata_diff_helper_t_str2valr\  s   &&&&r   str2valmoddata_diff_helper_t.str2val  rj  r#   c                	    V P                   P                  4        \        P                  ! V 4       \        P
                  ! V 4      # r.   )r	   r   r   disown_moddata_diff_helper_tr   r   rs   s   &r   r    moddata_diff_helper_t.__disown__  s/    		//5}}T""r#   r$   N)$r   r   r8   r9   r   r   r   r
   r   %moddata_diff_helper_t_module_name_get%moddata_diff_helper_t_module_name_setr:  r   &moddata_diff_helper_t_netnode_name_get&moddata_diff_helper_t_netnode_name_setr;   moddata_diff_helper_t_fields_get moddata_diff_helper_t_fields_setr<  !moddata_diff_helper_t_nfields_get!moddata_diff_helper_t_nfields_setr=  -moddata_diff_helper_t_additional_mh_flags_get-moddata_diff_helper_t_additional_mh_flags_setr>  r\   delete_moddata_diff_helper_tr   rQ  rV  r]  rc  rh  rn  r   r<   r$   r#   r   r6  r6  h  s   -/I!#GH
--z--/K / ..
..0L# 0'/
((*(((*F$ *JHH446GS 6'
55z55 7 7 ">>O

PP#r#   r6  c                      ] tR tRt]! R R RR7      t]t]P                  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 R ltR R lt]R R l4       tR tR tRtR# )merge_node_helper_ti  c                	6    V P                   P                  4       # r.   rL   rM   s   &r   rO   merge_node_helper_t.<lambda>  rQ   r#   c                	8    V P                   P                  V4      # r.   rL   rS   s   &&r   rO   r    rU   r#   rV   rW   c               (    V ^8  d   QhRRRRRRRR/# )	rB   rK  'uchar'rL  'nodeidx_t'rY  rM  rC   r   r$   )rE   s   "r   rF    merge_node_helper_t.__annotate__  s)      W K x r#   c                0    \         P                  ! WW#4      # )zRprint the name of the specified entry (to be used in print_diffpos_name) 
        )r   $merge_node_helper_t_print_entry_namer\  s   &&&&r   print_entry_name$merge_node_helper_t.print_entry_name  s     >>t 	r#   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )rB   rK  r`  rL  r  rY  r  arg3rM  rC   ri   r$   )rE   s   "r   rF   r    s2     $ $ $W $$#$'+$r#   c                2    \         P                  ! V WW44      # )zprint the details of the specified entry usually contains multiple lines, one for each attribute or detail. (to be used in print_diffpos_details) 
        )r   'merge_node_helper_t_print_entry_detailsr   rK  rL  rY  r  s   &&&&&r   print_entry_details'merge_node_helper_t.print_entry_details  s     AA$$ 	$r#   c               (    V ^8  d   QhRRRRRRRR/# )	rB   rK  r`  rL  r  rY  rM  rC   ri   r$   )rE   s   "r   rF   r    s*      } G r#   c                0    \         P                  ! WW#4      # )zaget column headers for chooser (to be used in linear_diff_source_t::get_column_headers) 
        )r   &merge_node_helper_t_get_column_headersr\  s   &&&&r   get_column_headers&merge_node_helper_t.get_column_headers  s     @@ 	r#   c               $    V ^8  d   QhRRRRRR/# )rB   rK  r  rL  r  rC   rD   r$   )rE   s   "r   rF   r    s&     M M M Mt Mr#   c                0    \         P                  ! WV4      # )z<filter: check if we should perform merging for given record
)r    merge_node_helper_t_is_mergeablerP  s   &&&r   is_mergeable merge_node_helper_t.is_mergeable  s     ::4tLLr#   c                   V ^8  d   QhRR/# )rB   rC   z	'netnode'r$   )rE   s   "r   rF   r    s     @ @I @r#   c                .    \         P                  ! V 4      # )zreturn netnode to be used as source. If this function returns BADNODE netnode will be created using netnode name passed to create_nodeval_diff_source 
        )r   merge_node_helper_t_get_netnoders   s   &r   get_netnodemerge_node_helper_t.get_netnode  s     99$??r#   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rB   rK  z'nodeidx_t *'rL  rM  rY  r   r  rC   ri   r$   )rE   s   "r   rF   r    s2      } H #6:>r#   c                2    \         P                  ! WVW44      # )z!map scalar/string/buffered value
)r   merge_node_helper_t_map_scalarr  s   &&&&&r   
map_scalarmerge_node_helper_t.map_scalar  s     88T 	r#   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rB   rK  r   rL  rM  rY  r   r  rC   ri   r$   )rE   s   "r   rF   r    s2      s ( #6:>r#   c                	2    \         P                  ! WVW44      # r.   )r   merge_node_helper_t_map_stringr  s   &&&&&r   
map_stringmerge_node_helper_t.map_string  s    88T 	r#   c               $    V ^8  d   QhRRRRRR/# )rB   rK  r  rL  rM  rC   ri   r$   )rE   s   "r   rF   r  
  s&     H HG H8 Ht Hr#   c                0    \         P                  ! WV4      # )z|notify helper that some data was changed in the database and internal structures (e.g. caches) should be refreshed 
        )r   merge_node_helper_t_refreshrP  s   &&&r   refreshmerge_node_helper_t.refresh
  s     55d$GGr#   c               (    V ^8  d   QhRRRRRRRR/# )rB   sr   prefixeasz'eavec_t const &'rC   ri   r$   )rE   s   "r   rF   r    s/     K K KS K/@ KD Kr#   c                0    \         P                  ! WV4      # )zcan be used by derived classes
)r    merge_node_helper_t_append_eavec)r  r  r  s   &&&r   append_eavec merge_node_helper_t.append_eavec  s     ::1cJJr#   c                	    V P                   \        8X  d   R pMT p\        P                  ! V \        P                  ! V4      4       R # r.   )r   r  r   merge_node_helper_t_swiginitnew_merge_node_helper_tr   s   & r   r\   merge_node_helper_t.__init__  s>    >>00EE//j##7$$)7+ 	,r#   c                	    V P                   P                  4        \        P                  ! V 4       \        P
                  ! V 4      # r.   )r	   r   r   disown_merge_node_helper_tr   r   rs   s   &r   r   merge_node_helper_t.__disown__  s/    		--d3}}T""r#   r$   N)r   r   r8   r9   r   r   r   r
   r   delete_merge_node_helper_tr   r  r  r  r  r  r  r  r  staticmethodr  r\   r   r<   r$   r#   r   r  r    sq    -/I!#GH!<<$M
@

H
 K K
,#r#   r  c                  t   ] tR tRt$ ]! 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&    ]! ]P&                  ]P(                  4      tR]R&   RR R llt]P.                  tRtR# )merge_node_info_ti&  c                	6    V P                   P                  4       # r.   rL   rM   s   &r   rO   merge_node_info_t.<lambda>'  rQ   r#   c                	8    V P                   P                  V4      # r.   rL   rS   s   &&r   rO   r  '  rU   r#   rV   rW   r   r   r  tagr_   	nds_flagsz'merge_node_helper_t *'node_helperNc               (    V ^8  d   QhRRRRRRRR/# )	rB   r   r   r  r  r  r_   r  'merge_node_helper_t'r$   )rE   s   "r   rF   merge_node_info_t.__annotate__:  s/     F FS Fw F3 FFr#   c           	     	^    \         P                  ! V \         P                  ! WW44      4       R # r.   )r   merge_node_info_t_swiginitnew_merge_node_info_t)r   r   r  r  r  s   &&&&&r   r\   merge_node_info_t.__init__:  s+    --dJ!!5""&Y5E 	Fr#   r$   r.   )r   r   r8   r9   r   r   r   r
   r   merge_node_info_t_name_getmerge_node_info_t_name_setr   r   merge_node_info_t_tag_getmerge_node_info_t_tag_setr  merge_node_info_t_nds_flags_getmerge_node_info_t_nds_flags_setr  !merge_node_info_t_node_helper_get!merge_node_info_t_node_helper_setr  r\   delete_merge_node_info_tr   r<   r$   r#   r   r  r  &  s    -/I!#GH>>
""$D# $J@@,,.C .jHH224Is 4+3J)):)),+K( +F "::r#   r  c               8    V ^8  d   QhRRRRRRRRRR	R
RRRRR/# )rB   mhp'merge_handler_params_t'r   r   r   r  r  r  r_   r  r  skip_empty_nodesrD   rC   rc   r$   )rE   s   "r   rF   rF   D  sM     7 7&> 7s 777,/77267 	7r#   c           	     4    \         P                  ! WVW4WV4      # )a  Create a merge handler for netnode scalar/string values 
        
:param mhp: merging parameters
:param label: handler short name (to be be appended to mhp.label)
:param nodename: netnode name
:param tag: a tag used to access values in the netnode
:param nds_flags: netnode value attributes (a combination of nds_flags_t)
:param skip_empty_nodes: do not create handler in case of empty netnode
:returns: diff source object (normally should be attahced to a merge handler))r   create_nodeval_merge_handler)r  r   r   r  r  r  r  s   &&&&&&&r   r  r  D  s      223x7 7r#   c               0    V ^8  d   QhRRRRRRRRR	R
RR/# )rB   outz'merge_handlers_t *'r  r  r   r   valdescz'merge_node_info_t'r  rD   rC   ri   r$   )rE   s   "r   rF   rF   U  s<     # #'; ##(+#6I###'#r#   c                2    \         P                  ! WVW44      # )a  Create a serie of merge handlers for netnode scalar/string values (call create_nodeval_merge_handler() for each member of VALDESC) 
        
:param out: [out] created handlers will be placed here
:param mhp: merging parameters
:param nodename: netnode name
:param valdesc: array of handler descriptions
:param skip_empty_nodes: do not create handlers for empty netnodes
:returns: diff source object (normally should be attahced to a merge handler))r   create_nodeval_merge_handlers)r  r  r   r  r  s   &&&&&r   r  r  U  s     33Ch# #r#   c                    V ^8  d   QhRRRR/# )rB   data_idr_   rC   ri   r$   )rE   s   "r   rF   rF   d  s     > >C >4 >r#   c                .    \         P                  ! V 4      # r.   )r   destroy_moddata_merge_handlers)r  s   &r   r  r  d  s    44W==r#   c                    V ^8  d   QhRRRR/# )rB   r   r   rC   r   r$   )rE   s   "r   rF   rF   h  s     . .O .s .r#   c                .    \         P                  ! V 4      # )z9Get nice name for EA diffpos 
        
:param ea: diffpos)r   get_ea_diffpos_name)r   s   &r   r  r  h  s     ))"--r#   )NTr   )r:   
__future__r   sysr   _swig_python_version_info__package__r   r   r   builtinsr   ImportErrorr   r%   r+   r5   r   r7   r   SWIG_PYTHON_LEGACY_BOOLtypingr=   r>   r?   
ida_idaapiMERGE_KIND_NETNODEMERGE_KIND_AUTOQMERGE_KIND_INFMERGE_KIND_ENCODINGSMERGE_KIND_ENCODINGS2MERGE_KIND_SCRIPTS2MERGE_KIND_SCRIPTSMERGE_KIND_CUSTDATAMERGE_KIND_CUSTCNVMERGE_KIND_ENUMSMERGE_KIND_STRUCTSMERGE_KIND_TILSMERGE_KIND_TINFOMERGE_KIND_STRMEMMERGE_KIND_UDTMEMMERGE_KIND_GHSTRCMTMERGE_KIND_STRMEMCMTMERGE_KIND_SELECTORSMERGE_KIND_STTMERGE_KIND_SEGMENTSMERGE_KIND_SEGGRPSMERGE_KIND_SEGREGSMERGE_KIND_ORPHANSMERGE_KIND_BYTEVALMERGE_KIND_FIXUPSMERGE_KIND_MAPPINGMERGE_KIND_EXPORTSMERGE_KIND_IMPORTSMERGE_KIND_PATCHESMERGE_KIND_FLAGSMERGE_KIND_EXTRACMTMERGE_KIND_AFLAGS_EAMERGE_KIND_IGNOREMICROMERGE_KIND_FILEREGIONSMERGE_KIND_HIDDENRANGESMERGE_KIND_SOURCEFILESMERGE_KIND_FUNCMERGE_KIND_FRAMEMGRMERGE_KIND_FRAMEMERGE_KIND_STKPNTSMERGE_KIND_FLOWSMERGE_KIND_CREFSMERGE_KIND_DREFSMERGE_KIND_BPTSMERGE_KIND_WATCHPOINTSMERGE_KIND_BOOKMARKSMERGE_KIND_TRYBLKSMERGE_KIND_DIRTREEMERGE_KIND_VFTABLESMERGE_KIND_SIGNATURESMERGE_KIND_PROBLEMSMERGE_KIND_UIMERGE_KIND_DEKSTOPSMERGE_KIND_NOTEPADMERGE_KIND_LOADERMERGE_KIND_DEBUGGERMERGE_KIND_DBG_MEMREGSMERGE_KIND_LUMINAMERGE_KIND_LASTMERGE_KIND_ENDMERGE_KIND_NONErH   objectrJ   merge_data_t_swigregisterr   !item_block_locator_t_swigregisterr   #merge_handler_params_t_swigregister	MH_LISTENMH_TERSEMH_UI_NODETAILSMH_UI_COMPLEXMH_UI_DP_NOLINEDIFFMH_UI_DP_SHORTNAMEMH_UI_INDENTMH_UI_SPLITNAMEMH_UI_CHAR_MASKMH_UI_COMMANAMEMH_UI_COLONNAMEr6  "moddata_diff_helper_t_swigregisterNDS_IS_BOOL	NDS_IS_EANDS_IS_RELATIVE
NDS_IS_STR
NDS_SUPVALNDS_BLOBNDS_EV_RANGENDS_EV_FUNCNDS_MAP_IDXNDS_MAP_VALNDS_VAL8NDS_INC	NDS_UI_NDr   merge_node_helper_t_swigregisterr  merge_node_info_t_swigregisterr  r  r  r  r$   r#   r   <module>rP     s  )T # 9#/"
 L$ L
 $<<  % % 22 .. **!66 "88  44 22  44 22 .. 22 ,,.. 00 00  44 !66 !66 ** 44 22 22 22 22 00 22 22 22 22 ..  44 !66 #:: #:: $<< #:: ,, 44 .. 22 .. .. .. ,,#:: !66 22 22  44 "88  44 (( 44 22 00  44 #:: 00 ,,**,,+\&6 \&~  $ $\ 2#6 #<  , ,-A BV@V V@r  . ./E F  	,,(( 44 22 &&,,,,,,,,D#F D#N  - -.C D$$  	,,""
""
&&$$$$$$


  	G#& G#T  + +,? @; ;6  ) )*; <7"#>.k  s   V VV