1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
Ë
Jñúh¥tãót—dZdZdZdZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddlm Z ddlmZddlmZdd    lmZdd
lmZdd lmZddlZddlZddlZej2d ej4d ««eZdd„Zed¬«d„«Zed¬«d„«Zd„Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0d Z1d!Z2d"Z3d#Z4d$Z5d%Z6d&„Z7gd'¢Z8e7e8«Z9gd(¢Z:e7e:«Z;gd)¢Z<e7e<«Z=gd*¢Z>e7e>«Z?gd+¢Z@e7e@«ZAgd,¢ZBe7eB«ZCgd-¢ZDe7eD«ZEgd.¢ZFe7eF«ZGdZHgd/¢ZIe7eI«ZJgd0¢ZKe7eK«ZLdZMd1ZNd2ZOd3ZPd4ZQd5ZRd6ZSd7ZTd8ZUd9ZVgd:¢ZWe7eW«ZXgd;¢ZYe7eY«ZZgd<¢Z[e7e[«Z\e]e[«Z\e[D]$\Z^Z_e_e\vre\e_jÁe^«Œe^ge\e_<Œ&d=„Zad>„Zbd?„Zcd@„ZddA„ZedB„ZfGdC„dDeg«ZhGdE„dF«ZiGdG„dHej«ZkGdI„dJ«Zld1d1d1d1d2d2d4d4d4d4d4d7d7d7d1dKœZmed¬«dL„«ZneddM¬N«dO„«ZoGdP„dQ«ZpGdR„dSep«Zqedd¬N«dT„«ZrGdU„dVep«ZsGdW„dX«ZtGdY„dZet«ZuGd[„d\et«ZvGd]„d^et«ZwGd_„d`et«ZxGda„dbet«ZyGdc„ddet«ZzGde„dfet«Z{Gdg„dhet«Z|Gdi„djet«Z}Gdk„dlet«Z~Gdm„dnet«ZGdo„dpet«Z€Gdq„dret«ZGds„dtet«Z‚Gdu„dvet«ZƒGdw„dxet«Z„Gdy„dzes«Z…Gd{„d|«Z†Gd}„d~e†«Z‡Gd„d€e†«ZˆGd„d‚e†«Z‰Gdƒ„d„e†«ZŠGd…„d†e†«Z‹Gd‡„dˆe†«ZŒGd‰„dŠe†«ZGd‹„dŒe†«ZŽGd„dŽe†«ZGd„de†«ZGd‘„d’«Z‘efe
j$e
j&ze
j(zd“z«Z•d”„Z–efe
j$e
j&ze
j(z«Z—ed¬«    džd•ee˜e™ešfd–e›d—e›fd˜„«ZœGd™„dš«Zd›„ZžeŸdœk(rež«yy)Ÿabpefile, Portable Executable reader module
 
All the PE file basic structures are available with their default names as
attributes of the instance returned.
 
Processed elements such as the import table are made available with lowercase
names, to differentiate them from the upper case basic structure names.
 
pefile has been tested against many edge cases such as corrupted and malformed
PEs as well as malware, which often attempts to abuse the format way beyond its
standard use. To the best of my knowledge most of the abuse is handled
gracefully.
 
Copyright (c) 2005-2023 Ero Carrera <ero.carrera@gmail.com>
z Ero Carreraz2023.2.7zero.carrera@gmail.coméN)ÚCounter)ÚUnion)Úsha1)Úsha256)Úsha512©Úmd5Úbackslashreplace_ÚbackslashreplaceFcóF‡‡—|stj‰‰«Sˆˆfd„}|S)Ncó|•‡—tj‰‰«|«Štj|«ˆfd„«}|S)Ncó:•—tj‰|i|¤Ž«S©N)ÚcopymodÚcopy)ÚargsÚkwargsÚ cached_funcs  €ú9H:\Change_password\venv_build\Lib\site-packages\pefile.pyÚwrapperz-lru_cache.<locals>.decorator.<locals>.wrapper;sø€ô—<‘<¡ ¨TР<°VÑ <Ó=Ð =ó)Ú    functoolsÚ    lru_cacheÚwraps)ÚfrrÚmaxsizeÚtypeds  @€€rÚ    decoratorzlru_cache.<locals>.decorator8s>ù€Ø9”i×)Ñ)¨'°5Ó9¸!Ó<ˆ ä    ‰˜Ó    ó    >ó
ð    >ðˆr)rr)rrrrs``  rrr4s&ù€Ù Ü×"Ñ" 7¨EÓ2Ð2õð Ðré)rcó:—|tkr|St|dz «dzS)Né)ÚFILE_ALIGNMENT_HARDCODED_VALUEÚint)ÚvalÚfile_alignments  rÚcache_adjust_FileAlignmentr&Es$€àÔ6Ò6؈
Ü e‘ Ó  Ñ %Ð%rcóD—|dkr|}|r||zr|t||z «zS|S)Né)r#)r$Úsection_alignmentr%s   rÚcache_adjust_SectionAlignmentr*Ls8€à˜6Ò!Ø*Ðñ˜SÐ#4Ò4Ø ¤C¨Ð.?Ñ(?Ó$@ÑAÐAØ €Jrcó$—|jd«S©Nr)Úcount)Údatas rÚ count_zeroesr/\s€Ø :‰:a‹=Ðréé r!é€é iMZiZMiNEiLEiLXiVZiPEéìli i cóT—t|Dcgc] }|d|df‘Œc}|z«Scc}w)Nér)Údict)ÚpairsÚes  rÚ two_way_dictr;Šs,€Ü  uÖ- !!A‘$˜˜!™’Ò-°Ñ5Ó 6Ð6ùÒ-sŠ%))ÚIMAGE_DIRECTORY_ENTRY_EXPORTr)ÚIMAGE_DIRECTORY_ENTRY_IMPORTr7)ÚIMAGE_DIRECTORY_ENTRY_RESOURCEé)ÚIMAGE_DIRECTORY_ENTRY_EXCEPTIONé)ÚIMAGE_DIRECTORY_ENTRY_SECURITYé)ÚIMAGE_DIRECTORY_ENTRY_BASERELOCé)ÚIMAGE_DIRECTORY_ENTRY_DEBUGé)ÚIMAGE_DIRECTORY_ENTRY_COPYRIGHTé)ÚIMAGE_DIRECTORY_ENTRY_GLOBALPTRé)ÚIMAGE_DIRECTORY_ENTRY_TLSé    )Ú!IMAGE_DIRECTORY_ENTRY_LOAD_CONFIGé
)Ú"IMAGE_DIRECTORY_ENTRY_BOUND_IMPORTé )ÚIMAGE_DIRECTORY_ENTRY_IATé )Ú"IMAGE_DIRECTORY_ENTRY_DELAY_IMPORTé )Ú$IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTORé)ÚIMAGE_DIRECTORY_ENTRY_RESERVEDé))ÚIMAGE_FILE_RELOCS_STRIPPEDr7)ÚIMAGE_FILE_EXECUTABLE_IMAGEr?)ÚIMAGE_FILE_LINE_NUMS_STRIPPEDrC)ÚIMAGE_FILE_LOCAL_SYMS_STRIPPEDrK)ÚIMAGE_FILE_AGGRESIVE_WS_TRIMr4)ÚIMAGE_FILE_LARGE_ADDRESS_AWAREr3)ÚIMAGE_FILE_16BIT_MACHINEé@)ÚIMAGE_FILE_BYTES_REVERSED_LOé€)ÚIMAGE_FILE_32BIT_MACHINEé)ÚIMAGE_FILE_DEBUG_STRIPPEDr!)Ú"IMAGE_FILE_REMOVABLE_RUN_FROM_SWAPé)ÚIMAGE_FILE_NET_RUN_FROM_SWAPr)ÚIMAGE_FILE_SYSTEMr()ÚIMAGE_FILE_DLLr1)ÚIMAGE_FILE_UP_SYSTEM_ONLYé@)ÚIMAGE_FILE_BYTES_REVERSED_HIr2).)ÚIMAGE_SCN_TYPE_REGr)ÚIMAGE_SCN_TYPE_DSECTr7)ÚIMAGE_SCN_TYPE_NOLOADr?)ÚIMAGE_SCN_TYPE_GROUPrC)ÚIMAGE_SCN_TYPE_NO_PADrK)ÚIMAGE_SCN_TYPE_COPYr4)ÚIMAGE_SCN_CNT_CODEr3)ÚIMAGE_SCN_CNT_INITIALIZED_DATAra)Ú IMAGE_SCN_CNT_UNINITIALIZED_DATArc)ÚIMAGE_SCN_LNK_OTHERre)ÚIMAGE_SCN_LNK_INFOr!)ÚIMAGE_SCN_LNK_OVERrh)ÚIMAGE_SCN_LNK_REMOVEr)ÚIMAGE_SCN_LNK_COMDATr()ÚIMAGE_SCN_MEM_PROTECTEDrm)ÚIMAGE_SCN_NO_DEFER_SPEC_EXCrm)ÚIMAGE_SCN_GPRELr2)ÚIMAGE_SCN_MEM_FARDATAr2)ÚIMAGE_SCN_MEM_SYSHEAPé)ÚIMAGE_SCN_MEM_PURGEABLEé)ÚIMAGE_SCN_MEM_16BITr„)ÚIMAGE_SCN_MEM_LOCKEDi)ÚIMAGE_SCN_MEM_PRELOADi)ÚIMAGE_SCN_ALIGN_1BYTESr0)ÚIMAGE_SCN_ALIGN_2BYTESi )ÚIMAGE_SCN_ALIGN_4BYTESi0)ÚIMAGE_SCN_ALIGN_8BYTESi@)ÚIMAGE_SCN_ALIGN_16BYTESiP)ÚIMAGE_SCN_ALIGN_32BYTESi`)ÚIMAGE_SCN_ALIGN_64BYTESip)ÚIMAGE_SCN_ALIGN_128BYTESi€)ÚIMAGE_SCN_ALIGN_256BYTESi)ÚIMAGE_SCN_ALIGN_512BYTESi )ÚIMAGE_SCN_ALIGN_1024BYTESi°)ÚIMAGE_SCN_ALIGN_2048BYTESiÀ)ÚIMAGE_SCN_ALIGN_4096BYTESiÐ)ÚIMAGE_SCN_ALIGN_8192BYTESià)ÚIMAGE_SCN_ALIGN_MASKið)ÚIMAGE_SCN_LNK_NRELOC_OVFLi)ÚIMAGE_SCN_MEM_DISCARDABLEi)ÚIMAGE_SCN_MEM_NOT_CACHEDi)ÚIMAGE_SCN_MEM_NOT_PAGEDé)ÚIMAGE_SCN_MEM_SHAREDé)ÚIMAGE_SCN_MEM_EXECUTEi )ÚIMAGE_SCN_MEM_READi@)ÚIMAGE_SCN_MEM_WRITEr5))ÚIMAGE_DEBUG_TYPE_UNKNOWNr)ÚIMAGE_DEBUG_TYPE_COFFr7)ÚIMAGE_DEBUG_TYPE_CODEVIEWr?)ÚIMAGE_DEBUG_TYPE_FPOrA)ÚIMAGE_DEBUG_TYPE_MISCrC)ÚIMAGE_DEBUG_TYPE_EXCEPTIONrE)ÚIMAGE_DEBUG_TYPE_FIXUPrG)ÚIMAGE_DEBUG_TYPE_OMAP_TO_SRCrI)ÚIMAGE_DEBUG_TYPE_OMAP_FROM_SRCrK)ÚIMAGE_DEBUG_TYPE_BORLANDrM)ÚIMAGE_DEBUG_TYPE_RESERVED10rO)ÚIMAGE_DEBUG_TYPE_CLSIDrQ)ÚIMAGE_DEBUG_TYPE_VC_FEATURErS)ÚIMAGE_DEBUG_TYPE_POGOrU)ÚIMAGE_DEBUG_TYPE_ILTCGrW)ÚIMAGE_DEBUG_TYPE_MPXrY)ÚIMAGE_DEBUG_TYPE_REPROr4)Ú&IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICSé))ÚIMAGE_SUBSYSTEM_UNKNOWNr)ÚIMAGE_SUBSYSTEM_NATIVEr7)ÚIMAGE_SUBSYSTEM_WINDOWS_GUIr?)ÚIMAGE_SUBSYSTEM_WINDOWS_CUIrA)ÚIMAGE_SUBSYSTEM_OS2_CUIrE)ÚIMAGE_SUBSYSTEM_POSIX_CUIrI)ÚIMAGE_SUBSYSTEM_NATIVE_WINDOWSrK)ÚIMAGE_SUBSYSTEM_WINDOWS_CE_GUIrM)ÚIMAGE_SUBSYSTEM_EFI_APPLICATIONrO)Ú'IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVERrQ)Ú"IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVERrS)ÚIMAGE_SUBSYSTEM_EFI_ROMrU)ÚIMAGE_SUBSYSTEM_XBOXrW)Ú(IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATIONr4)$)ÚIMAGE_FILE_MACHINE_UNKNOWNr)ÚIMAGE_FILE_MACHINE_I386iL)ÚIMAGE_FILE_MACHINE_R3000ib)ÚIMAGE_FILE_MACHINE_R4000if)ÚIMAGE_FILE_MACHINE_R10000ih)ÚIMAGE_FILE_MACHINE_WCEMIPSV2ii)ÚIMAGE_FILE_MACHINE_ALPHAi„)ÚIMAGE_FILE_MACHINE_SH3i¢)ÚIMAGE_FILE_MACHINE_SH3DSPi£)ÚIMAGE_FILE_MACHINE_SH3Ei¤)ÚIMAGE_FILE_MACHINE_SH4i¦)ÚIMAGE_FILE_MACHINE_SH5i¨)ÚIMAGE_FILE_MACHINE_ARMiÀ)ÚIMAGE_FILE_MACHINE_THUMBiÂ)ÚIMAGE_FILE_MACHINE_ARMNTiÄ)ÚIMAGE_FILE_MACHINE_AM33iÓ)ÚIMAGE_FILE_MACHINE_POWERPCið)ÚIMAGE_FILE_MACHINE_POWERPCFPiñ)ÚIMAGE_FILE_MACHINE_IA64r!)ÚIMAGE_FILE_MACHINE_MIPS16if)ÚIMAGE_FILE_MACHINE_ALPHA64é„)ÚIMAGE_FILE_MACHINE_AXP64r×)ÚIMAGE_FILE_MACHINE_MIPSFPUif)ÚIMAGE_FILE_MACHINE_MIPSFPU16if)ÚIMAGE_FILE_MACHINE_TRICOREi )ÚIMAGE_FILE_MACHINE_CEFiï )ÚIMAGE_FILE_MACHINE_EBCi¼)ÚIMAGE_FILE_MACHINE_RISCV32i2P)ÚIMAGE_FILE_MACHINE_RISCV64idP)ÚIMAGE_FILE_MACHINE_RISCV128i(Q)ÚIMAGE_FILE_MACHINE_LOONGARCH32i2b)ÚIMAGE_FILE_MACHINE_LOONGARCH64idb)ÚIMAGE_FILE_MACHINE_AMD64id†)ÚIMAGE_FILE_MACHINE_M32RiA)ÚIMAGE_FILE_MACHINE_ARM64idª)ÚIMAGE_FILE_MACHINE_CEEiîÀ) )ÚIMAGE_REL_BASED_ABSOLUTEr)ÚIMAGE_REL_BASED_HIGHr7)ÚIMAGE_REL_BASED_LOWr?)ÚIMAGE_REL_BASED_HIGHLOWrA)ÚIMAGE_REL_BASED_HIGHADJrC)ÚIMAGE_REL_BASED_MIPS_JMPADDRrE)ÚIMAGE_REL_BASED_SECTIONrG)ÚIMAGE_REL_BASED_RELrI)ÚIMAGE_REL_BASED_MIPS_JMPADDR16rM)ÚIMAGE_REL_BASED_IA64_IMM64rM)ÚIMAGE_REL_BASED_DIR64rO)ÚIMAGE_REL_BASED_HIGH3ADJrQ))ÚIMAGE_LIBRARY_PROCESS_INITr7)ÚIMAGE_LIBRARY_PROCESS_TERMr?)ÚIMAGE_LIBRARY_THREAD_INITrC)ÚIMAGE_LIBRARY_THREAD_TERMrK)Ú(IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VAr3)Ú%IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASEra)Ú(IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITYrc)Ú"IMAGE_DLLCHARACTERISTICS_NX_COMPATre)Ú%IMAGE_DLLCHARACTERISTICS_NO_ISOLATIONr!)ÚIMAGE_DLLCHARACTERISTICS_NO_SEHrh)Ú IMAGE_DLLCHARACTERISTICS_NO_BINDr)Ú%IMAGE_DLLCHARACTERISTICS_APPCONTAINERr()Ú#IMAGE_DLLCHARACTERISTICS_WDM_DRIVERr1)Ú!IMAGE_DLLCHARACTERISTICS_GUARD_CFrm)Ú.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWAREr2))ÚUNW_FLAG_EHANDLERr7)ÚUNW_FLAG_UHANDLERr?)ÚUNW_FLAG_CHAININFOrC))ÚRAXr)ÚRCXr7)ÚRDXr?)ÚRBXrA)ÚRSPrC)ÚRBPrE)ÚRSIrG)ÚRDIrI)ÚR8rK)ÚR9rM)ÚR10rO)ÚR11rQ)ÚR12rS)ÚR13rU)ÚR14rW)ÚR15rYr7r?rArCrErGrKrMrO))Ú    RT_CURSORr7)Ú    RT_BITMAPr?)ÚRT_ICONrA)ÚRT_MENUrC)Ú    RT_DIALOGrE)Ú    RT_STRINGrG)Ú
RT_FONTDIRrI)ÚRT_FONTrK)ÚRT_ACCELERATORrM)Ú    RT_RCDATArO)ÚRT_MESSAGETABLErQ)ÚRT_GROUP_CURSORrS)Ú RT_GROUP_ICONrW)Ú
RT_VERSIONr4)Ú RT_DLGINCLUDEé)Ú RT_PLUGPLAYé)ÚRT_VXDr³)Ú RT_ANICURSORé)Ú
RT_ANIICONé)ÚRT_HTMLé)Ú RT_MANIFESTé)^)Ú LANG_NEUTRALr)ÚLANG_INVARIANTé)ÚLANG_AFRIKAANSé6)Ú LANG_ALBANIANé)Ú LANG_ARABICr7)Ú LANG_ARMENIANé+)Ú LANG_ASSAMESEéM)Ú
LANG_AZERIé,)Ú LANG_BASQUEé-)ÚLANG_BELARUSIANé#)Ú LANG_BENGALIéE)ÚLANG_BULGARIANr?)Ú LANG_CATALANrA)Ú LANG_CHINESErC)Ú LANG_CROATIANé)Ú
LANG_CZECHrE)Ú LANG_DANISHrG)Ú LANG_DIVEHIée)Ú
LANG_DUTCHr&)Ú LANG_ENGLISHrM)Ú LANG_ESTONIANé%)Ú LANG_FAEROESEé8)Ú
LANG_FARSIé))Ú LANG_FINNISHrQ)Ú LANG_FRENCHrS)Ú LANG_GALICIANéV)Ú LANG_GEORGIANé7)Ú LANG_GERMANrI)Ú
LANG_GREEKrK)Ú LANG_GUJARATIéG)Ú LANG_HEBREWrU)Ú
LANG_HINDIé9)ÚLANG_HUNGARIANrW)ÚLANG_ICELANDICrY)ÚLANG_INDONESIANé!)Ú LANG_ITALIANr4)Ú LANG_JAPANESEr$)Ú LANG_KANNADAéK)Ú LANG_KASHMIRIé`)Ú
LANG_KAZAKé?)Ú LANG_KONKANIéW)Ú LANG_KOREANé)Ú LANG_KYRGYZra)Ú LANG_LATVIANé&)ÚLANG_LITHUANIANé')ÚLANG_MACEDONIANé/)Ú
LANG_MALAYé>)ÚLANG_MALAYALAMéL)Ú LANG_MANIPURIéX)Ú LANG_MARATHIéN)ÚLANG_MONGOLIANéP)Ú LANG_NEPALIéa)ÚLANG_NORWEGIANr³)Ú
LANG_ORIYAéH)Ú LANG_POLISHr))ÚLANG_PORTUGUESEr+)Ú LANG_PUNJABIéF)Ú LANG_ROMANIANr/)Ú LANG_RUSSIANé)Ú LANG_SANSKRITéO)Ú LANG_SERBIANrH)Ú LANG_SINDHIéY)Ú LANG_SLOVAKé)ÚLANG_SLOVENIANé$)Ú LANG_SPANISHrO)Ú LANG_SWAHILIéA)Ú LANG_SWEDISHé)Ú LANG_SYRIACéZ)Ú
LANG_TAMILéI)Ú
LANG_TATARéD)Ú LANG_TELUGUéJ)Ú    LANG_THAIé)Ú LANG_TURKISHé)ÚLANG_UKRAINIANé")Ú    LANG_URDUr3)Ú
LANG_UZBEKéC)ÚLANG_VIETNAMESEé*)Ú LANG_GAELICé<)Ú LANG_MALTESEé:)Ú
LANG_MAORIé()ÚLANG_RHAETO_ROMANCEr-)Ú
LANG_SAAMIé;)Ú LANG_SORBIANé.)Ú    LANG_SUTUé0)Ú LANG_TSONGAé1)Ú LANG_TSWANAé2)Ú
LANG_VENDAé3)Ú
LANG_XHOSAé4)Ú    LANG_ZULUé5)ÚLANG_ESPERANTOé)Ú
LANG_WALONé)Ú LANG_CORNISHé‘)Ú
LANG_WELSHé’)Ú LANG_BRETONé“)g)ÚSUBLANG_NEUTRALr)ÚSUBLANG_DEFAULTr7)ÚSUBLANG_SYS_DEFAULTr?)ÚSUBLANG_ARABIC_SAUDI_ARABIAr7)ÚSUBLANG_ARABIC_IRAQr?)ÚSUBLANG_ARABIC_EGYPTrA)ÚSUBLANG_ARABIC_LIBYArC)ÚSUBLANG_ARABIC_ALGERIArE)ÚSUBLANG_ARABIC_MOROCCOrG)ÚSUBLANG_ARABIC_TUNISIArI)ÚSUBLANG_ARABIC_OMANrK)ÚSUBLANG_ARABIC_YEMENrM)ÚSUBLANG_ARABIC_SYRIArO)ÚSUBLANG_ARABIC_JORDANrQ)ÚSUBLANG_ARABIC_LEBANONrS)ÚSUBLANG_ARABIC_KUWAITrU)ÚSUBLANG_ARABIC_UAErW)ÚSUBLANG_ARABIC_BAHRAINrY)ÚSUBLANG_ARABIC_QATARr4)ÚSUBLANG_AZERI_LATINr7)ÚSUBLANG_AZERI_CYRILLICr?)ÚSUBLANG_CHINESE_TRADITIONALr7)ÚSUBLANG_CHINESE_SIMPLIFIEDr?)ÚSUBLANG_CHINESE_HONGKONGrA)ÚSUBLANG_CHINESE_SINGAPORErC)ÚSUBLANG_CHINESE_MACAUrE)Ú SUBLANG_DUTCHr7)ÚSUBLANG_DUTCH_BELGIANr?)ÚSUBLANG_ENGLISH_USr7)ÚSUBLANG_ENGLISH_UKr?)ÚSUBLANG_ENGLISH_AUSrA)ÚSUBLANG_ENGLISH_CANrC)ÚSUBLANG_ENGLISH_NZrE)ÚSUBLANG_ENGLISH_EIRErG)ÚSUBLANG_ENGLISH_SOUTH_AFRICArI)ÚSUBLANG_ENGLISH_JAMAICArK)ÚSUBLANG_ENGLISH_CARIBBEANrM)ÚSUBLANG_ENGLISH_BELIZErO)ÚSUBLANG_ENGLISH_TRINIDADrQ)ÚSUBLANG_ENGLISH_ZIMBABWErS)ÚSUBLANG_ENGLISH_PHILIPPINESrU)ÚSUBLANG_FRENCHr7)ÚSUBLANG_FRENCH_BELGIANr?)ÚSUBLANG_FRENCH_CANADIANrA)ÚSUBLANG_FRENCH_SWISSrC)ÚSUBLANG_FRENCH_LUXEMBOURGrE)ÚSUBLANG_FRENCH_MONACOrG)ÚSUBLANG_GERMANr7)ÚSUBLANG_GERMAN_SWISSr?)ÚSUBLANG_GERMAN_AUSTRIANrA)ÚSUBLANG_GERMAN_LUXEMBOURGrC)ÚSUBLANG_GERMAN_LIECHTENSTEINrE)ÚSUBLANG_ITALIANr7)ÚSUBLANG_ITALIAN_SWISSr?)ÚSUBLANG_KASHMIRI_SASIAr?)ÚSUBLANG_KASHMIRI_INDIAr?)ÚSUBLANG_KOREANr7)ÚSUBLANG_LITHUANIANr7)ÚSUBLANG_MALAY_MALAYSIAr7)ÚSUBLANG_MALAY_BRUNEI_DARUSSALAMr?)ÚSUBLANG_NEPALI_INDIAr?)ÚSUBLANG_NORWEGIAN_BOKMALr7)ÚSUBLANG_NORWEGIAN_NYNORSKr?)ÚSUBLANG_PORTUGUESEr?)ÚSUBLANG_PORTUGUESE_BRAZILIANr7)ÚSUBLANG_SERBIAN_LATINr?)ÚSUBLANG_SERBIAN_CYRILLICrA)ÚSUBLANG_SPANISHr7)ÚSUBLANG_SPANISH_MEXICANr?)ÚSUBLANG_SPANISH_MODERNrA)ÚSUBLANG_SPANISH_GUATEMALArC)ÚSUBLANG_SPANISH_COSTA_RICArE)ÚSUBLANG_SPANISH_PANAMArG)Ú"SUBLANG_SPANISH_DOMINICAN_REPUBLICrI)ÚSUBLANG_SPANISH_VENEZUELArK)ÚSUBLANG_SPANISH_COLOMBIArM)ÚSUBLANG_SPANISH_PERUrO)ÚSUBLANG_SPANISH_ARGENTINArQ)ÚSUBLANG_SPANISH_ECUADORrS)ÚSUBLANG_SPANISH_CHILErU)ÚSUBLANG_SPANISH_URUGUAYrW)ÚSUBLANG_SPANISH_PARAGUAYrY)ÚSUBLANG_SPANISH_BOLIVIAr4)ÚSUBLANG_SPANISH_EL_SALVADORr$)ÚSUBLANG_SPANISH_HONDURASrq)ÚSUBLANG_SPANISH_NICARAGUAr&)ÚSUBLANG_SPANISH_PUERTO_RICOr³)ÚSUBLANG_SWEDISHr7)ÚSUBLANG_SWEDISH_FINLANDr?)ÚSUBLANG_URDU_PAKISTANr7)ÚSUBLANG_URDU_INDIAr?)ÚSUBLANG_UZBEK_LATINr7)ÚSUBLANG_UZBEK_CYRILLICr?)ÚSUBLANG_DUTCH_SURINAMrA)ÚSUBLANG_ROMANIANr7)ÚSUBLANG_ROMANIAN_MOLDAVIAr?)ÚSUBLANG_RUSSIANr7)ÚSUBLANG_RUSSIAN_MOLDAVIAr?)ÚSUBLANG_CROATIANr7)ÚSUBLANG_LITHUANIAN_CLASSICr?)ÚSUBLANG_GAELICr7)ÚSUBLANG_GAELIC_SCOTTISHr?)ÚSUBLANG_GAELIC_MANXrAcó¨—tj|d«}tj|g«D]
}||vsŒ|cStj|dg«dS)Nú    *unknown*r)ÚLANGÚgetÚSUBLANG)Ú
lang_valueÚ sublang_valueÚ    lang_nameÚ sublang_names    rÚget_sublang_name_for_langrA’sV€Ü—‘˜ [Ó1€IÜŸ ™  M°2Ó6ò ˆ ð ˜ Ò $ØÒ ð     ô ;‰;} { mÓ 4°QÑ 7Ð7rcóŒ—d}d}|t|«krž|||dz}t|«dkrytjd|«d}|dz }|dk7rOd|dzcxkrt|«kr8nn5    t||||dzz«j    d«||<|dk\ry||dzz }|dz }|t|«krŒyy#t
$r|dz }YŒ4wxYw)Nrr?z<húutf-16ler7rA)ÚlenÚstructÚunpackÚbÚdecodeÚUnicodeDecodeError)r.ÚcounterÚlÚiÚ error_countÚ
data_sliceÚlen_s       rÚ parse_stringsrPŸs逨    €AØ€KØ
Œc$‹iŠ-à˜!˜a !™e_ˆ
Ü ˆz‹?˜QÒ Ø ä}‰}˜T :Ó.¨qÑ1ˆØ    ˆQ‰ˆØ 1Š9˜˜d Q™hÔ3¬#¨d«)Õ3ð ܘt A¨¨D°1©H© Ð5Ó6×=Ñ=¸jÓI'‘
ð˜aÒØØ ˜‘‰MˆAؐ1‰ ˆð# Œc$‹i-øô&ò ؘqÑ  Ùð úsÁ(&B2Â2CÃCcó —|j«Dcgc]0}t|ttf«r|j    |«r|||f‘Œ2c}Scc}w)z´Read the flags from a dictionary and return them in a usable form.
 
    Will return a list of (flag, value) for all flags in "flag_dict"
    matching the filter "flag_filter".
    )ÚkeysÚ
isinstanceÚstrÚbytesÚ
startswith)Ú    flag_dictÚ flag_filterÚflags   rÚretrieve_flagsrZ¶sM€ð—N‘NÓ$ö à Ü dœS¤%˜LÔ )¨d¯o©o¸kÔ.Jð
ˆy˜‰Òò ðùò s“5A có`—|D])\}}||zrd|j|<Œd|j|<Œ+y)a
Will process the flags and set attributes in the object accordingly.
 
    The object "obj" will gain attributes named after the flags provided in
    "flags" and valued True/False, matching the results of applying each
    flag value from "flags" to flag_field.
    TFN)Ú__dict__)ÚobjÚ
flag_fieldÚflagsrYÚvalues     rÚ    set_flagsraÄs;€ðò'‰ ˆˆeØ :Ò Ø!%ˆCL‰L˜Ò à!&ˆCL‰L˜Ò ñ    'rcó&—|dk7xr ||dz
zdk(S)Nrr7©)r$s rÚ power_of_twordÓs€Ø !‰8Ò .˜  a¡™¨QÑ.Ð.rcóˆ—t|t«r|St|t«r t|«Stj|d«S)NÚcp1252)rSrUÚ    bytearrayÚcodecsÚencode)Úxs rrGrG×s5€Ü!”UÔØˆÜ    A”yÔ    !ܐQ‹xˆä}‰}˜Q Ó)Ð)rcó.‡—eZdZˆfd„Zˆfd„Zd„ZˆxZS)Ú
AddressSetcó>•—t‰|«d|_d|_yr)ÚsuperÚ__init__ÚminÚmax)ÚselfÚ    __class__s €rrozAddressSet.__init__ásø€Ü ‰ÑÔØˆŒØˆrcóԕ—t‰||«|j€|nt|j|«|_|j€||_yt|j|«|_yr)rnÚaddrprq)rrr`rss  €rruzAddressSet.addæsMø€Ü ‰‰ EÔØ ŸH™HÐ,‘5´#°d·h±hÀÓ2FˆŒØ ŸH™HÐ,5ˆ´#°d·h±hÀÓ2Fˆrcóh—|j |j€dS|j|jz
Sr,)rprq©rrs rÚdiffzAddressSet.diffës,€Ø—H‘HÐ$¨¯©Ð(8ˆqÐQ¸d¿h¹hÈÏÉÑ>QÐQr)Ú__name__Ú
__module__Ú __qualname__rorurxÚ __classcell__©rss@rrlrlàsø„ôô
Gö
RrrlcóL—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d    „Z d
„Z d „Z y ) Ú!UnicodeStringWrapperPostProcessorzæThis class attempts to help the process of identifying strings
    that might be plain Unicode or Pascal. A list of strings will be
    wrapped on it with the hope the overlappings will help make the
    decision about their type.có.—||_||_d|_yr)ÚpeÚrva_ptrÚstring)rrrr‚s   rroz*UnicodeStringWrapperPostProcessor.__init__õs€ØˆŒØˆŒ ؈ rcó—|jS)zGet the RVA of the string.)r‚rws rÚget_rvaz)UnicodeStringWrapperPostProcessor.get_rvaús €à|‰|Ðrcó&—|jdd«S)z6Return the escaped UTF-8 representation of the string.úutf-8r
)rHrws rÚ__str__z)UnicodeStringWrapperPostProcessor.__str__þs€à{‰{˜7Ð$7Ó8Ð8rcóN—|jsy|jj|ŽS)NÚ)rƒrH)rrrs  rrHz(UnicodeStringWrapperPostProcessor.decodes#€Ø{Š{ØØ!ˆt{‰{×!Ñ! 4Ð(Ð(rcó—d}y)z>Make this instance None, to express it's no known string type.Nrcrws rÚ
invalidatez,UnicodeStringWrapperPostProcessor.invalidates€à‰rcó(—    |jj|jdz|j«¬«|_y#t
$rH|jj «jdj|jdz««YywxYw)Nr?©Ú
max_lengthzCFailed rendering pascal string, attempting to read from RVA 0x{0:x})    rÚget_string_u_at_rvar‚Úget_pascal_16_lengthrƒÚ PEFormatErrorÚ get_warningsÚappendÚformatrws rÚrender_pascal_16z2UnicodeStringWrapperPostProcessor.render_pascal_16 s}€ð    ØŸ'™'×5Ñ5Ø— ‘ ˜qÑ ¨T×-FÑ-FÓ-Hð6óˆDKøôò    Ø G‰G×  Ñ  Ó "× )Ñ )ð6ß6<±f¸T¿\¹\ÈAÑ=MÓ6Nö ð    ús‚=AÁABÂBcó8—|j|j«Sr)Ú9_UnicodeStringWrapperPostProcessor__get_word_value_at_rvar‚rws rr‘z6UnicodeStringWrapperPostProcessor.get_pascal_16_lengths€Ø×+Ñ+¨D¯L©LÓ9Ð9rc󪗠   |jj|d«}t|«dkryt    j
d|«dS#t$rYywxYw)Nr?Fú<Hr)rÚget_datar’rDrErF)rrÚrvar.s   rÚ__get_word_value_at_rvaz9UnicodeStringWrapperPostProcessor.__get_word_value_at_rvasW€ð    Ø—7‘7×#Ñ# C¨Ó+ˆDô ˆt‹9qŠ=Øä}‰}˜T 4Ó(¨Ñ+Ð+øô ò    Ùð    ús‚AÁ    AÁAcó\—|j|dz
«dk(r||jz
|_yy)zÙThe next RVA is taken to be the one immediately following this one.
 
        Such RVA could indicate the natural end of the string and will be checked
        to see if there's a Unicode NULL character there.
        r?rTF)r˜r‚Úlength)rrÚ next_rva_ptrs  rÚask_unicode_16z0UnicodeStringWrapperPostProcessor.ask_unicode_16$s2€ð × 'Ñ '¨ °qÑ(8Ó 9¸QÒ >Ø&¨¯©Ñ5ˆDŒKØàrcóü—    |jj|j«|_y#t$rE|jj «j dj|j««YywxYw)NzDFailed rendering unicode string, attempting to read from RVA 0x{0:x})rrr‚rƒr’r“r”r•rws rÚrender_unicode_16z3UnicodeStringWrapperPostProcessor.render_unicode_160s^€ð    ØŸ'™'×5Ñ5°d·l±lÓCˆDKøÜò    Ø G‰G×  Ñ  Ó "× )Ñ )ð6ß6<±f¸T¿\¹\Ó6Jö ð    ús‚*-­A A;Á:A;N)ryrzr{Ú__doc__ror…rˆrHrŒr–r‘r˜r¡r£rcrrrrïs9„ñ"ò
ò
ò9ò)ò
ò    ò:ò    ,ò
órrcó—eZdZdZd„Zd„Zy)r’z"Generic PE format error exception.có—||_yr)r`)rrr`s  rrozPEFormatError.__init__=s    €Øˆ
rcó,—t|j«Sr)Úreprr`rws rrˆzPEFormatError.__str__@s€ÜD—J‘JÓÐrN)ryrzr{r¤rorˆrcrrr’r’:s„Ù,òó rr’có@—eZdZdZd„Zd
d„Zd
d„Zd
d„Zd„Zd„Z    d„Z
y    ) ÚDumpz1Convenience class for dumping the PE information.có—g|_yr)Útextrws rroz Dump.__init__Gs    €Øˆ    rcó6—|D]}|j||«Œy)zeAdds a list of lines.
 
        The list can be indented with the optional argument 'indent'.
        N)Úadd_line)rrÚtxtÚindentÚlines    rÚ    add_lineszDump.add_linesJs!€ð
ò    (ˆDØ M‰M˜$ Õ 'ñ    (rcó.—|j|dz|«y)z\Adds a line.
 
        The line can be indented with the optional argument 'indent'.
        ú
N)ru©rrr¯r°s   rr®z Dump.add_lineRs€ð
     ‰t‘˜VÕ$rcó`—|jjdjd|z|««y)z|Adds some text, no newline will be appended.
 
        The text can be indented with the optional argument 'indent'.
        z{0}{1}ú N)r¬r”r•rµs   rruzDump.addYs%€ð
         ‰    ×јŸ™¨¨v©°sÓ;Õ<rcóF—|jdjd|««y)zAdds a header element.z
{0}{1}{0}
z
----------N)r®r•)rrr¯s  rÚ
add_headerzDump.add_header`s€à  ‰ m×*Ñ*¨8°SÓ9Õ:rcó:—|jjd«y)zAdds a newline.r´N)r¬r”rws rÚ add_newlinezDump.add_newlineds€à     ‰    ×јÕrcóF—djd„|jD««S)z"Get the text in its current state.rŠc3ó>K—|]}dj|«–—Œy­w)ú{0}N)r•)Ú.0rGs  rú    <genexpr>z Dump.get_text.<locals>.<genexpr>jsèø€Ò:¨1u—|‘| A—Ñ:ùs‚)Újoinr¬rws rÚget_textz Dump.get_texths€àw‰wÑ:°·    ±    Ô:Ó:Ð:rN©r) ryrzr{r¤ror²r®rur¹r»rÂrcrrrªrªDs(„Ù;òó(ó%ó=ò;òó;rrª)rjÚcrGÚBÚhÚHrLÚIrKÚLrÚqÚQÚdÚsc    ó:—d}|}|dtjvrmtdj|Dcgc]}|tjvsŒ|‘Œc}««}dj|Dcgc]}|tjvsŒ|‘Œc}«}t||zScc}wcc}w)Nr7rrŠ)rƒÚdigitsr#rÁÚSTRUCT_SIZEOF_TYPES)Útr-Ú_trÌs    rÚ sizeof_typerÓ€s‚€à €EØ    
€B؈tŒv}‰}ÑäB—G‘G¨Ö@ 1¨Q´&·-±-Ò-?šQÒ@ÓAÓBˆØ W‰W Ö=˜A a¬v¯}©}Ò&<’aÒ=Ó >ˆÜ ˜rÑ " UÑ *Ð*ùòAùÚ=s®B ÁB Á$BÁ<BT)rrc
óì—d}g}i}g}d}d}|D]Ã}d|vsŒ|jdd«\}}    ||z }|jd«|    jd«}
g} |
D]Z}    |    |vr>|D cgc]} | dt|    «‘Œ} } | j|    «}dj    |    |«}    | j|    «|||    <Œ\|t |«z }|j| «ŒÅt j|«}|||||fScc} w)Nú<rú,r7z    {0}_{1:d})Úsplitr”rDr-r•rÓrEÚcalcsize)r•Ú__format_str__Ú__unpacked_data_elms__Ú__field_offsets__Ú__keys__Ú__format_length__ÚoffsetÚelmÚelm_typeÚelm_nameÚ    elm_namesÚnamesrjÚ search_listÚ    occ_counts               rÚ
set_formatræ‹s:€ð€NØÐØÐØ€HØÐà €FØò#ˆØ #Š:Ø!$§¡¨3°Ó!2Ñ ˆHhØ ˜hÑ &ˆNØ "× )Ñ )¨$Ô /à Ÿ™ sÓ+ˆI؈EØ%ò 5Ø˜xÑ'Ø?GÖ"H¸! 1 _¤s¨8£}Ò#5Ð"HKÐ"HØ +× 1Ñ 1°(Ó ;IØ*×1Ñ1°(¸IÓFHØ— ‘ ˜XÔ&Ø.4Ð! (Ò+ð  5ð ”k (Ó+Ñ +ˆFð
O‰O˜EÕ "ð+#ô.Ÿ™¨Ó7Ðð    ØØØØð  ðùò#IsÁ"C1cón—eZdZdZdd„Zdefd„Zd„Zd„Zd„Z    d    „Z
d
„Z d „Z d „Z d „Zd„Zd„Zdd„Zd„Zy)Ú    StructurezPrepare structure object to extract members from data.
 
    Format is a list containing definitions for the elements
    of the structure.
    Ncó"—d|_g|_d|_i|_g|_|d}t |t «s t |«}t|«\|_|_|_|_|_d|_||_    |r||_
y|d|_
y)NrÕrr7F) rÙrÜrÝrÛrÚrSÚtupleræÚ__all_zeroes__Ú__file_offset__Úname)rrr•ríÚ file_offsetrÌs     rrozStructure.__init__¾s—€à!ˆÔ؈Œ Ø!"ˆÔØ!#ˆÔØ&(ˆÔ#à 1‰Iˆä˜!œUÔ#ܐa“ˆAô q‹Mñ     
Ø Ô Ø Ô 'Ø Ô "Ø ŒMØ Ô "ð$ˆÔØ*ˆÔ٠؈DIà˜q™    ˆDIrÚreturncó—|jSr)rÙrws rÚ__get_format__zStructure.__get_format__Úó€Ø×"Ñ"Ð"rcó:—|j|j|zS)zLReturn the offset within the field for the requested field in the structure.)rìrÛ©rrÚ
field_names  rÚget_field_absolute_offsetz#Structure.get_field_absolute_offsetÝs€à×#Ñ# d×&<Ñ&<¸ZÑ&HÑHÐHrcó —|j|S)z?Return the offset within the structure for the requested field.)rÛrôs  rÚget_field_relative_offsetz#Structure.get_field_relative_offsetás€à×%Ñ% jÑ1Ð1rcó—|jSr©rìrws rÚget_file_offsetzStructure.get_file_offsetås€Ø×#Ñ#Ð#rcó—||_yrrú©rrrÞs  rÚset_file_offsetzStructure.set_file_offsetès
€Ø%ˆÕrcó—|jS)z/Returns true is the unpacked data is all zeros.)rërws rÚ
all_zeroeszStructure.all_zeroesës€ð×"Ñ"Ð"rcó—|jS)zReturn size of the structure.)rÝrws rÚsizeofzStructure.sizeofðs€ð×%Ñ%Ð%rcó²—t|«}t|«|jkDr|d|j}n#t|«|jkr td«‚t    |«t|«k(rd|_t j|j|«|_    t|j«D]&\}}|j|D]}t|||«ŒŒ(y)Nz-Data length less than expected header length.T) rGrDrÝr’r/rërErFrÙrÚÚ    enumeraterÜÚsetattr)rrr.Úidxr$Úkeys     rÚ
__unpack__zStructure.__unpack__õsĀ䐋wˆä ˆt‹9t×-Ñ-Ò -ØÐ0˜$×0Ñ0Ð1‰Dô‹Y˜×/Ñ/Ò /ÜРOÓPÐ Pä ˜Ó ¤ T£Ò *Ø"&ˆDÔ ä&,§m¡m°D×4GÑ4GÈÓ&NˆÔ#Ü! $×"=Ñ"=Ó>ò    (‰HˆCØ—}‘} SÑ)ò (Ü˜˜c 3Õ'ñ (ñ    (rcóô—g}t|j«D]?\}}d}|j|D]}t||«}||k7sŒn|j    |«ŒAt j |jg|¢­ŽSr)rrÚrÜÚgetattrr”rEÚpackrÙ)rrÚ
new_valuesrr$Únew_valrs      rÚ__pack__zStructure.__pack__ s†€àˆ
ä! $×"=Ñ"=Ó>ò    '‰HˆCØˆGØ—}‘} SÑ)ò Ü! $¨Ó,ð˜c“>Ùð  ð × Ñ ˜gÕ &ð    'ô{‰{˜4×.Ñ.Ð<°Ò<Ð<rcó@—dj|j««S)Nr´)rÁÚdumprws rrˆzStructure.__str__s€Øy‰y˜Ÿ™›Ó%Ð%rc
ó¦—ddj|j«Dcgc]!}dj|j««‘Œ#c}«zScc}w)Nz<Structure: %s>r·)rÁrr×)rrrÍs  rÚ__repr__zStructure.__repr__s>€Ø Ø H‰H°4·9±9³;Ö?¨ac—h‘h˜qŸw™w›yÕ)Ò?Ó @ñ
ð    
ùÚ?sŸ&A
c
ó>—g}|jdj|j««tjDcgc] }|tj
vsŒt |«‘Œ"}}|jD]„}|D]{}t||«}t|ttf«rn|jd«rdj|«}ndj|«}|dk(s|dk(rÖ    |dtjtj|««zz }n¦t#|«}|jd    «r>d
j%|j'd «Dcgc]}d j|«‘Œc}«}nLd
j%|j'd «Dcgc]"}||vr t)|«nd j|«‘Œ$c}«}|jd|j*||j,z|j*||dz|fz«Œ~Œ‡|Scc}w#t $r|dz }YŒ_wxYwcc}wcc}w)z1Returns a string representation of the structure.z[{0}]Ú
Signature_z{:<8X}z0x{:<8X}Ú TimeDateStampÚ dwTimeStampz     [%s UTC]z [INVALID TIME]Ú    SignaturerŠóz{:02X}z    \x{0:02x}z0x%-8X 0x%-3X %-30s %sú:)r”r•rírƒÚ    printableÚ
whitespaceÚordrÜr
rSr#ÚlongrVÚtimeÚasctimeÚgmtimeÚ
ValueErrorrgrÁÚrstripÚchrrÛrì)    rrÚ indentationrrLÚprintable_bytesrRrr$Úval_strs             rrzStructure.dump$s €ðˆà  ‰ G—N‘N 4§9¡9Ó-Ô.ô#×,Ñ,ö
ذ¼×9JÑ9JÒ0JŒCFð
ˆð
ð —M‘Mó&    ˆDØó% ä˜d CÓ(Ü˜c¤C¬ ;Ô/Ø—~‘~ lÔ3Ø"*§/¡/°#Ó"6™à",×"3Ñ"3°CÓ"8˜Ø˜oÒ-°¸ Ò1Eð9Ø# {´T·\±\Ä$Ç+Á+ÈcÓBRÓ5SÑ'SÑS™Gô(¨›nGØ—~‘~ kÔ2Ø"$§'¡'Ø9@¿¹ÈÓ9PÖQ°A˜XŸ_™_¨QÕ/ÒQó#™ð#%§'¡'ð
*1¯©¸Ó)@ö    ð%&ð%&¨Ñ$8ô!$ A¤à%1×%8Ñ%8¸Ó%;ñ!<òó#˜ð— ‘ Ø,à×.Ñ.¨sÑ3°d×6JÑ6JÑJØ×.Ñ.¨sÑ3ؘc™    Øð    ñöò;% ð&    ðPˆ ùò]
øô$ *ò9Ø#Ð'8Ñ8šGð9üò Rùòs)¿G<Á G<Ã.HÅH Æ'H ÈHÈHc ó"—i}|j|d<|jD]Õ}|D]Î}t||«}t|tt
f«r9|dk(s|dk(rp    d|t jt j|««fz}nAdjd„|Dcgc]}t|t«s t|«n|‘Œ!c}D««}|j||jz|j||dœ||<ŒÐŒ×|S#t$rd|z}YŒFwxYwcc}w)    z5Returns a dictionary representation of the structure.rèrrz0x%-8X [%s UTC]z0x%-8X [INVALID TIME]rŠc3órK—|]/}t|«tjvr t|«nd|z–—Œ1y­w)z\x%02xN)r#rƒr)r¿rÌs  rrÀz&Structure.dump_dict.<locals>.<genexpr>rs6èø€ò"àô#& a£&¬F×,<Ñ,<Ñ"<œ˜AœÀ)ÈaÁ-ÓOñ"ùs‚57)Ú
FileOffsetÚOffsetÚValue)rírÜr
rSr#rrrr r!rÁrrÛrì)rrÚ    dump_dictrRrr$rÄs      rr,zStructure.dump_dict[s,€ðˆ    à!%§¡ˆ    +Ñð—M‘Mò    ˆDØò ä˜d CÓ(Ü˜c¤C¬ ;Ô/ؘoÒ-°¸ Ò1Eð@Ø"3Ø #Ü $§ ¡ ¬T¯[©[¸Ó-=Ó >ð7ñ#™CðŸ'™'ñ"àSVÖ!WÈa´
¸1¼cÔ0B¤# a¤&ÈÑ"IÒ!Wô"óCð #'×"8Ñ"8¸Ñ"=À×@TÑ@TÑ"TØ"×4Ñ4°SÑ9Ø ñ"    ˜#’ñ% ð    ð2Ðøô *ò@Ø"9¸CÑ"?šCð@üò
"XsÁ-C8Â$D Ã8D    ÄD    ©NNrÃ)ryrzr{r¤rorTrñrörørûrþrrrrrˆrrr,rcrrrèrè·sV„ñó "ð8# ó#òIò2ò$ò&ò#ò
&ò
(ò.=ò &ò
ó
5ón"rrècór—eZdZdZd„Zd„Zd„Zdd„Zd„Zd„Z    d    „Z
d
„Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zy)ÚSectionStructurez#Convenience section handling class.cóȗd|vr |d|_|d=d|_d|_d|_d|_t j |g|¢­i|¤Žd|_d|_d|_    d|_
y)Nr) rÚPointerToRawDataÚVirtualAddressÚ SizeOfRawDataÚMisc_VirtualSizerèroÚPointerToRawData_adjÚVirtualAddress_adjÚsection_min_addrÚsection_max_addr)rrÚarglÚargds   rrozSectionStructure.__init__ƒss€Ø 4‰<ؘ4‘jˆDŒGؐT
à $ˆÔØ"ˆÔØ!ˆÔØ $ˆÔÜ×ј4Ð/ $Ò/¨$Ò/Ø$(ˆÔ!Ø"&ˆÔØ $ˆÔØ $ˆÕrcóܗ|j€U|jI|jj|j|jjj
«|_|jSr)r5r1rÚadjust_FileAlignmentÚOPTIONAL_HEADERÚ FileAlignmentrws rÚget_PointerToRawData_adjz)SectionStructure.get_PointerToRawData_adj’sZ€Ø × $Ñ $Ð ,Ø×$Ñ$Ð0Ø,0¯G©G×,HÑ,HØ×)Ñ)¨4¯7©7×+BÑ+B×+PÑ+Pó-Ô)ð×(Ñ(Ð(rcó—|j€t|jh|jj|j|jjj
|jjj «|_|jSr)r6r2rÚadjust_SectionAlignmentr=ÚSectionAlignmentr>rws rÚget_VirtualAddress_adjz'SectionStructure.get_VirtualAddress_adjšsn€Ø × "Ñ "Ð *Ø×"Ñ"Ð.Ø*.¯'©'×*IÑ*IØ×'Ñ'Ø—G‘G×+Ñ+×<Ñ<Ø—G‘G×+Ñ+×9Ñ9ó+Ô'ð
×&Ñ&Ð&rNcóÆ—|€|j«}n$||j«z
|j«z}|||z}n|j||jz}n|}|r||t|||jz«}|j
A|j5||j
|jzkDr|j
|jz}|j j||S)aGet data chunk from a section.
 
        Allows to query data from the section by passing the
        addresses where the PE file would be loaded by default.
        It is then possible to retrieve code and data by their real
        addresses as they would be if loaded.
 
        Note that sections on disk can include padding that would
        not be loaded to memory. That is the case if `section.SizeOfRawData`
        is greater than `section.Misc_VirtualSize`, and that means
        that data past `section.Misc_VirtualSize` is padding.
        In case you are not interested in this padding, passing
        `ignore_padding=True` will truncate the result in order
        not to return the padding (if any).
 
        Returns bytes() under Python 3.x and set() under Python 2.7
        )r?rCr3rpr4r1rÚ__data__)rrÚstartrŸÚignore_paddingrÞÚends      rr›zSectionStructure.get_data¤sñ€ð& ˆ=Ø×2Ñ2Ó4‰Fð˜×3Ñ3Ó5Ñ5Ø×-Ñ-Ó/ñ0ˆFð Рؘ6‘/‰CØ × Ñ Ð +ؘ4×-Ñ-Ñ-‰CàˆCá ˜c˜o°&Ð2Dܐc˜6 D×$9Ñ$9Ñ9Ó:ˆCð
×  Ñ  Ð ,°×1CÑ1CÐ1OؐT×*Ñ*¨T×-?Ñ-?Ñ?Ò?Ø×+Ñ+¨d×.@Ñ.@Ñ@Øw‰w×Ñ  sÐ+Ð+rcó—|dk(rttd«}t|||«nOd|vrKt||«r?|r|jdxxt|zcc<n|jdxxt|zcc<||j|<y)NÚCharacteristicsÚ
IMAGE_SCN_)rZÚSECTION_CHARACTERISTICSraÚhasattrr\)rrrír$Ú section_flagss    rÚ __setattr__zSectionStructure.__setattr__Ðs~€à Ð$Ò $Ü*Ô+BÀLÓQˆMô d˜C Õ /à ˜TÑ !¤g¨d°DÔ&9ÙØ— ‘ Ð/Ó0Ô4KÈDÑ4QÑQÔ0à— ‘ Ð/Ó0Ô4KÈDÑ4QÑQÓ0à!ˆ ‰ dÒrcóJ—||j«z
|j«zSr)r?rCrýs  rÚget_rva_from_offsetz$SectionStructure.get_rva_from_offsetàs$€Ø˜×5Ñ5Ó7Ñ7¸$×:UÑ:UÓ:WÑWÐWrcóJ—||j«z
|j«zSr)rCr?©rrrœs  rÚget_offset_from_rvaz$SectionStructure.get_offset_from_rvaãs$€ØT×0Ñ0Ó2Ñ2°T×5RÑ5RÓ5TÑTÐTrcóv—|j€y|j«}||cxkxr||jzkScS)z<Check whether the section contains the file offset provided.F)r1r?r3)rrrÞr5s   rÚcontains_offsetz SectionStructure.contains_offsetæsJ€ð ×  Ñ  Ð (ðØ#×<Ñ<Ó>Ðà   FÖ VÐ-AÀD×DVÑDVÑ-VÑ Vð    
Ù Vð    
rcóB—|j0|j$|j|cxkxr|jkScS|j«}t|jj
«|j «z
|jkr |j}n t|j|j«}|j:|j|jkDr!||z|jkDr|j|z
}||_||z|_||cxkxr||zkScS)z8Check whether the section contains the address provided.) r7r8rCrDrrEr?r3r4rqÚnext_section_virtual_addressr2)rrrœr6Úsizes    rÚ contains_rvazSectionStructure.contains_rvaòs€ð ×  Ñ  Ð ,°×1FÑ1FÐ1RØ×(Ñ(¨CÖG°$×2GÑ2GÑGÐ GÑGÐ Gà!×8Ñ8Ó:Ðô ˆtw‰w×ÑÓ   4×#@Ñ#@Ó#BÑ BÀT×EWÑEWÒ Wð×(Ñ(‰Dät×)Ñ)¨4×+@Ñ+@ÓAˆDð × -Ñ -Ð 9Ø×1Ñ1°D×4GÑ4GÒGØ" TÑ)¨D×,MÑ,MÒMà×4Ñ4Ð7IÑIˆDà 2ˆÔØ 2°TÑ 9ˆÔØ! SÖDÐ+=ÀÑ+DÑDÐDÑDÐDrcó$—|j|«Sr)rZrSs  rÚcontainszSectionStructure.containss€Ø× Ñ  Ó%Ð%rcó@—|j|j««S)z1Calculate and return the entropy for the section.)Ú    entropy_Hr›rws rÚ get_entropyzSectionStructure.get_entropys€ð~‰~˜dŸm™m›oÓ.Ð.rcó^—t't|j««j«Sy)z/Get the SHA-1 hex-digest of the section's data.N)rr›Ú    hexdigestrws rÚ get_hash_sha1zSectionStructure.get_hash_sha1 s)€ô РܘŸ ™ ›Ó(×2Ñ2Ó4Ð 4ð rcó^—t't|j««j«Sy)z1Get the SHA-256 hex-digest of the section's data.N)rr›rarws rÚget_hash_sha256z SectionStructure.get_hash_sha256&ó)€ô Рܘ$Ÿ-™-›/Ó*×4Ñ4Ó6Ð 6ð rcó^—t't|j««j«Sy)z1Get the SHA-512 hex-digest of the section's data.N)rr›rarws rÚget_hash_sha512z SectionStructure.get_hash_sha512,rercó^—t't|j««j«Sy)z-Get the MD5 hex-digest of the section's data.N)r    r›rarws rÚ get_hash_md5zSectionStructure.get_hash_md52s(€ô ˆ?ܐt—}‘}“Ó'×1Ñ1Ó3Ð 3ð rcóȗ|sytt|««}d}|j«D]5}t|«t    |«z }||t j |d«zz}Œ7|S)z)Calculate the entropy of a chunk of data.grr?)rrgÚvaluesÚfloatrDÚmathÚlog)rrr.Ú
occurencesÚentropyrjÚp_xs      rr^zSectionStructure.entropy_H8sh€ñØäœY t›_Ó-ˆ
àˆØ×"Ñ"Ó$ò    .ˆAܘ“(œS ›YÑ&ˆCØ sœTŸX™X c¨1Ó-Ñ-Ñ -‰Gð    .ðˆr)NNF)ryrzr{r¤ror?rCr›rOrQrTrVrZr\r_rbrdrgrir^rcrrr/r/€sZ„Ù-ò %ò)ò'ó*,òX"ò XòUò
 
ò$EòL&ò/ò
5ò 7ò 7ò 4ó rr/có,—Gd„d«}g}i}|||«}|dD]Å}d|vr"|j«|j|«Œ)|jdd«\}}d|vr td«‚|jdd«\}}t    |«}||j «k7s||j «kDr!|j«|j|«|j||«ŒÇ|j«tt|««\}    }
} } } g}t| «D]j\}}||vr|j|«Œ||\}
}|Dcgc]}|tjg‘Œ}}|j|«|D]}| |d| |d<ŒŒl|    | | | ||fScc}w)Ncó6—eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z    y)    ú)set_bitfields_format.<locals>.AccumulatorcóX—g|_d|_d|_d|_||_||_y)Nú~r)Ú
_subfieldsÚ_nameÚ_typeÚ
_bits_leftÚ _comp_fieldsÚ_format)rrÚfmtÚ comp_fieldss   rroz2set_bitfields_format.<locals>.Accumulator.__init__Ks/€Ø ˆDŒOðˆDŒJ؈DŒJ؈DŒOØ +ˆDÔ ØˆDLrcó(—|j€y|jj|jdz|jz«|j|jf|j
t |j«dz
<d|_d|_g|_y)NrÖr7rv)ryr|r”rxrwr{rDrws rÚwrap_upz1set_bitfields_format.<locals>.Accumulator.wrap_upUss€Øz‰zÐ!ØØ L‰L× Ñ  §
¡
¨SÑ 0°4·:±:Ñ =Ô >Ø8<¿
¹
ÀDÇOÁOÐ7TˆD× Ñ œc $§,¡,Ó/°!Ñ3Ñ 4؈DŒJ؈DŒJØ ˆDOrcó4—t|dz|_||_y©NrK)rÐrzry)rrÚtps  rÚnew_typez2set_bitfields_format.<locals>.Accumulator.new_type^s€Ü1°"Ñ5¸Ñ9ˆDŒO؈DJrcó’—|xj|z c_|xj|zc_|jj||f«yr)rxrzrwr”)rrríÚbitcnts   rÚ add_subfieldz6set_bitfields_format.<locals>.Accumulator.add_subfieldbs4€Ø JŠJ˜$Ñ JØ OŠO˜vÑ %OØ O‰O× "Ñ " D¨& >Õ 2rcó—|jSr)ryrws rÚget_typez2set_bitfields_format.<locals>.Accumulator.get_typegó €Ø—:‘:Ð rcó—|jSr)rxrws rÚget_namez2set_bitfields_format.<locals>.Accumulator.get_namejrŠrcó—|jSr)rzrws rÚ get_bits_leftz7set_bitfields_format.<locals>.Accumulator.get_bits_leftms €Ø—?‘?Ð "rN)
ryrzr{ror€r„r‡r‰rŒrŽrcrrÚ AccumulatorrtJs%„ò    ò    !ò    ò    3ò
    ò    ó    #rrr7rrÖz3Structures with bitfields do not support unions yetr)r€r”r×ÚNotImplementedErrorr#r‰rŽr„r‡rærêrÚStructureWithBitfieldsÚ BTF_NAME_IDXÚextend)r•rÚold_fmtr~ÚacrßràráÚelm_bitsÚ
format_strÚ_Ú field_offsetsrRÚ format_lengthÚ extended_keysrr$ÚsbfrÚbf_namesÚns                     rÚset_bitfields_formatrŸHs¼€÷$#ñ$#ðL€GØ€KÙ    W˜kÓ    *€Bàa‰yò,ˆØc‰zØ J‰JŒLØ N‰N˜3Ô Ø à ŸY™Y s¨AÓ.ш(à (‰?Ü%ØEóð ð&Ÿ^™^¨C°Ó3ш(ܐx“=ˆØ r—{‘{“}Ò $¨°2×3CÑ3CÓ3EÒ(EØ J‰JŒLØ K‰K˜Ô !à
‰˜ (Õ+ð',ð(‡JJ„Lä8BÄ5ÈÃ>Ó8RÑ5€J= $¨ à€Mܘd“Oò8‰ˆˆSؐkÑ!Ø ×  Ñ   Ô %Ø Ø˜SÑ!‰ˆˆ3ØFIÖJÀQÔ-×:Ñ:Ñ;Ò<ÐJˆÐJØ×јXÔ&Øò    8ˆAØ"/°°A±Ñ"7ˆM˜!˜A™$Ò ñ    8ð8ð ˜  }°d¸MÈ;Ð WÐWùò KsÅFcóf‡—eZdZdZdZdZdZdZd d„Zˆfd„Z    ˆfd„Z
d ˆfd„    Z ˆfd„Z d    „Z d
„ZˆxZS) r‘aV
    Extends Structure's functionality with support for bitfields such as:
        ('B:4,LowerHalf', 'B:4,UpperHalf')
    To this end, two lists are maintained:
        * self.__keys__ that contains compound fields, for example
          ('B,~LowerHalfUpperHalf'), and is used during packing/unpaking
        * self.__keys_ext__ containing a separate key for each field (ex., LowerHalf,
          UpperHalf) to simplify implementation of dump()
    This way the implementation of unpacking/packing and dump() from Structure can be
    reused.
 
    In addition, we create a dictionary:
        <comound_field_index_in_keys> -->
            (data type, [ (subfield name, length in bits)+ ] )
    that facilitates bitfield paking and unpacking.
 
    With lru_cache() creating only once instance per format string, the memory
    overhead is negligible.
    rr7có—t|«\|_|_|_|_|_|_t|j«Dcgc]}d‘Œc}|_d|_    ||_
|dk7r||_ y|d|_ ycc}w)NFr) rŸrÙrÝrÛrÜÚ __keys_ext__Ú__compound_fields__ÚrangerÚrërìrí)rrr•rírîrLs     rrozStructureWithBitfields.__init__´s€ô ! Ó (ñ    
Ø Ô Ø Ô "Ø Ô "Ø ŒMØ Ô Ø Ô $ô6;¸4×;QÑ;QÓ5RÖ&S°¢tÒ&SˆÔ#Ø#ˆÔØ*ˆÔØ  DšLDˆ    ¨f°Q©iˆ    ùò'TsÁ    A?cóL•—tt| |«|j«yr)rnr‘rÚ_unpack_bitfield_attributes©rrr.rss  €rrz!StructureWithBitfields.__unpack__Äs!ø€ô    Ô$ dÑ6°tÔ<Ø ×(Ñ(Õ*rc󘕗|j«    tt|«}|j    «|S#|j    «wxYwr)Ú_pack_bitfield_attributesrnr‘rr¦r§s  €rrzStructureWithBitfields.__pack__ÊsEø€Ø ×&Ñ&Ô(ð    /ÜÔ/°Ñ?ÓAˆDà × ,Ñ ,Ô .؈ øð × ,Ñ ,Õ .ús    “7·A    c󐕗|j}|j|_    tt||«}||_|S#||_wxYwr)rÜr¢rnr‘r)rrr$ÚtkÚretrss    €rrzStructureWithBitfields.dumpÒsGø€Ø ]‰]ˆØ×)Ñ)ˆŒ ð    ÜÔ.°Ñ:¸;ÓGˆCàˆDŒM؈
øðˆDMús     <¼    AcóŽ•—|j}|j|_    tt|«}||_|S#||_wxYwr)rÜr¢rnr‘r,)rrr«r¬rss   €rr,z StructureWithBitfields.dump_dictÛsEø€Ø ]‰]ˆØ×)Ñ)ˆŒ ð    ÜÔ.°Ñ?ÓAˆCàˆDŒM؈
øðˆDMús     ;»    Acó”—|jj«D]«}|j|d}t||«}t    ||«d}|j|t
j D]Z}d|t
jzdz
}||z}t||t
j||z|z    «||t
jz }Œ\Œ­y)zaReplace compound attributes corresponding to bitfields with separate
        sub-fields.
        rr7N)
r£rRrÜr
Údelattrr‘Ú CF_SUBFLD_IDXÚBTF_BITCNT_IDXrr’)rrrLÚcf_nameÚcvalÚoffstÚsfÚmasks       rr¦z2StructureWithBitfields._unpack_bitfield_attributesäs܀ð×)Ñ)×.Ñ.Ó0ò     CˆAØ—m‘m AÑ& qÑ)ˆGܘ4 Ó)ˆDÜ D˜'Ô "؈EØ×.Ñ.¨qÑ1Ô2H×2VÑ2VÑWò CØ˜RÔ 6× EÑ EÑFÑFÈ!ÑKØ˜‘ÜØØÔ-×:Ñ:Ñ;ؘD‘[ UÑ*ôð
˜Ô2×AÑAÑBÑB‘ñ Cñ     Crcó‚—|jj«D]¢}|j|d}d\}}|j|tjD]Y}d|tj
zdz
}t ||tj«|z}|||zz}||tj
z }Œ[t|||«Œ¤y)z(Pack attributes into a compound bitfieldr©rrr7N)    r£rRrÜr‘r°r±r
r’r)rrrLr²r´Úacc_valrµr¶Ú    field_vals        rr©z0StructureWithBitfields._pack_bitfield_attributes÷sԀà×)Ñ)×.Ñ.Ó0ò
    ,ˆAØ—m‘m AÑ& qÑ)ˆGØ!‰NˆE7Ø×.Ñ.¨qÑ1Ô2H×2VÑ2VÑWò CØ˜RÔ 6× EÑ EÑFÑFÈ!ÑKä˜D "Ô%;×%HÑ%HÑ"IÓJÈTÑQðð˜9¨Ñ-Ñ-Ø˜Ô2×AÑAÑBÑB‘ð  Cô D˜' 7Õ +ñ
    ,rr-rÃ)ryrzr{r¤r’r±Ú CF_TYPE_IDXr°rorrrr,r¦r©r|r}s@rr‘r‘šsBø„ñð(€LØ€NØ€KØ€Mó8ô +ô õôòCö& ,rr‘có"‡—eZdZdZˆfd„ZˆxZS)Ú DataContainerzGeneric data container.c ód•—tt|
}|j«D]\}}|||«Œyr)rnr½rOÚitems)rrrÚ bare_setattrrr`rss     €rrozDataContainer.__init__    s2ø€Üœ]¨DÑ=ˆ ØŸ*™*›,ò    %‰JˆCÙ ˜˜eÕ $ñ    %r)ryrzr{r¤ror|r}s@rr½r½sø„Ù!÷%ð%rr½có—eZdZdZy)ÚImportDescDatazÅHolds import descriptor information.
 
    dll:        name of the imported DLL
    imports:    list of imported symbols (ImportData instances)
    struct:     IMAGE_IMPORT_DESCRIPTOR structure
    N©ryrzr{r¤rcrrrÂrÂó„òrrÂcó—eZdZdZd„Zy)Ú
ImportDatazÆHolds imported symbol's information.
 
    ordinal:    Ordinal of the symbol
    name:       Name of the symbol
    bound:      If the symbol is bound, this contains
                the address.
    có®—t|d«r¹t|d«r¬t|d«rŸ|dk(rÏ|jjtk(rt}n#|jjt
k(rt }|dzz|j_|jj|j_    |jj|j_
|jj|j_ nË|dk(r|j¹||j_    |jj|j_    |jj|j_
|jj|j_ n7|dk(r||j_    |jj|j_|jj|j_
|jj|j_ n±|dk(r¬|jr |jj|j«}|jj|j d|z«t#|«t#|j$«kDr t'd«‚|jj)|j|«||j*|<y)NÚordinalÚboundríéÿÿÚaddressrú9The export name provided is longer than the existing one.)rMrÚPE_TYPEÚOPTIONAL_HEADER_MAGIC_PEÚIMAGE_ORDINAL_FLAGÚOPTIONAL_HEADER_MAGIC_PE_PLUSÚIMAGE_ORDINAL_FLAG64Ú struct_tableÚOrdinalÚ AddressOfDataÚFunctionÚForwarderStringÚ
struct_iatÚ name_offsetrQÚset_dword_at_offsetÚordinal_offsetrDrír’Úset_bytes_at_offsetr\)rrrír$Ú ordinal_flagÚname_rvas     rrOzImportData.__setattr__!s €ô D˜)Õ $ܘ˜gÕ&ܘ˜fÕ%ðyÒ à—7‘7—?‘?Ô&>Ò>Ü#5‘LØ—W‘W—_‘_Ô(EÒEÜ#7Lð-9¸CÀ&¹LÑ,I×!Ñ!Ô)Ø26×2CÑ2C×2KÑ2K×!Ñ!Ô/Ø-1×->Ñ->×-FÑ-F×!Ñ!Ô*Ø48×4EÑ4E×4MÑ4M×!Ñ!Ö1ؘ’Ø—?‘?Ñ.Ø47D—O‘OÔ1Ø48·O±O×4QÑ4QD—O‘OÔ1Ø/3¯©×/LÑ/LD—O‘OÔ,Ø6:·o±o×6SÑ6SD—O‘OÖ3ؘÒ"Ø25×!Ñ!Ô/Ø,0×,=Ñ,=×,KÑ,K×!Ñ!Ô)Ø-1×->Ñ->×-LÑ-L×!Ñ!Ô*Ø48×4EÑ4E×4SÑ4S×!Ñ!Õ1ؘ’ð×#Ò#à#Ÿw™w×:Ñ:¸4×;KÑ;KÓLHØ—G‘G×/Ñ/Ø×+Ñ+¨g¸Ñ-Aôô ˜3“x¤# d§i¡i£.Ò0Ü+ØWóðð—G‘G×/Ñ/°×0@Ñ0@À#ÔFà!ˆ ‰ dÒrN©ryrzr{r¤rOrcrrrÆrÆs „ñó6"rrÆcó—eZdZdZy)Ú ExportDirDataz•Holds export directory information.
 
    struct:     IMAGE_EXPORT_DIRECTORY structure
    symbols:    list of exported symbols (ExportData instances)NrÃrcrrràràZs„òCrràcó—eZdZdZd„Zy)Ú
ExportDataadHolds exported symbols' information.
 
    ordinal:    ordinal of the symbol
    address:    address of the symbol
    name:       name of the symbol (None if the symbol is
                exported by ordinal only)
    forwarder:  if the symbol is forwarded it will
                contain the name of the target symbol,
                None otherwise.
    có˜—t|d«r.t|d«r!t|d«rt|d«r|dk(r'|jj|j|«nÛ|dk(r'|jj    |j
|«n¯|dk(rSt |«t |j«kDr td«‚|jj|j|«nW|dk(rRt |«t |j«kDr td«‚|jj|j|«||j|<y)NrÈrËÚ    forwarderrírÌz<The forwarder name provided is longer than the existing one.)rMrÚset_word_at_offsetrÚrÙÚaddress_offsetrDrír’rÛrØräÚforwarder_offsetr\©rrrír$s   rrOzExportData.__setattr__ms€ô D˜)Õ $ܘ˜iÕ(ܘ˜kÕ*ܘ˜fÕ%ðyÒ Ø—‘×*Ñ*¨4×+>Ñ+>ÀÕDؘÒ"Ø—‘×+Ñ+¨D×,?Ñ,?ÀÕEؘ’ôs“8œc $§)¡)›nÒ,Ü'ØSóðð—‘×+Ñ+¨D×,<Ñ,<¸cÕBؘÒ$ôs“8œc $§.¡.Ó1Ò1Ü'ØVóðð—‘×+Ñ+¨D×,AÑ,AÀ3ÔGà!ˆ ‰ dÒrNrÞrcrrrârâas „ñ    ó""rrâcó—eZdZdZy)ÚResourceDirDatazŸHolds resource directory information.
 
    struct:     IMAGE_RESOURCE_DIRECTORY structure
    entries:    list of entries (ResourceDirEntryData instances)
    NrÃrcrrrêrê’ó„òrrêcó—eZdZdZy)ÚResourceDirEntryDataaFHolds resource directory entry data.
 
    struct:     IMAGE_RESOURCE_DIRECTORY_ENTRY structure
    name:       If the resource is identified by name this
                attribute will contain the name string. None
                otherwise. If identified by id, the id is
                available at 'struct.Id'
    id:         the id, also in struct.Id
    directory:  If this entry has a lower level directory
                this attribute will point to the
                ResourceDirData instance representing it.
    data:       If this entry has no further lower directories
                and points to the actual resource data, this
                attribute will reference the corresponding
                ResourceDataEntryData instance.
    (Either of the 'directory' or 'data' attribute will exist,
    but not both.)
    NrÃrcrrríríšs„òrrícó—eZdZdZy)ÚResourceDataEntryDataz£Holds resource data entry information.
 
    struct:     IMAGE_RESOURCE_DATA_ENTRY structure
    lang:       Primary language ID
    sublang:    Sublanguage ID
    NrÃrcrrrïrï¯rÄrrïcó—eZdZdZy)Ú    DebugDataz‹Holds debug information.
 
    struct:     IMAGE_DEBUG_DIRECTORY structure
    entries:    list of entries (IMAGE_DEBUG_TYPE instances)
    NrÃrcrrrñrñ¸rërrñcó—eZdZdZy)ÚDynamicRelocationDataaHolds dynamic relocation information.
 
    struct:        IMAGE_DYNAMIC_RELOCATION structure
    symbol:        Symbol to which dynamic relocations must be applied
    relocations:   List of dynamic relocations for this symbol (BaseRelocationData instances)
    NrÃrcrrróróÀrÄrrócó—eZdZdZy)ÚBaseRelocationDataz›Holds base relocation information.
 
    struct:     IMAGE_BASE_RELOCATION structure
    entries:    list of relocation data (RelocationData instances)
    NrÃrcrrrõrõÉrërrõcó—eZdZdZd„Zy)ÚRelocationDatazÅHolds relocation information.
 
    type:       Type of relocation
                The type string can be obtained by
                RELOCATION_TYPE[type]
    rva:        RVA of the relocation
    cóü—t|d«ra|jj}|dk(r |dz|dzz}n)|dk(r$t||jz
d«}|dz|dzz}||j_||j
|<y)NrEÚtyperSéÿrœrið)rMrEÚDatarqÚbase_rvar\)rrrír$ÚwordrÞs     rrOzRelocationData.__setattr__Ús‚€ô 4˜Ô "ð—;‘;×#Ñ#ˆDàvŠ~ؘr™     d¨U¡lÑ3‘ؘ’ܘS 4§=¡=Ñ0°!Ó4Ø˜v™ ¨&°5©.Ñ9ð $ˆDK‰KÔ à!ˆ ‰ dÒrNrÞrcrrr÷r÷Ñs „ñó"rr÷có—eZdZdZy)ÚTlsDatazJHolds TLS information.
 
    struct:     IMAGE_TLS_DIRECTORY structure
    NrÃrcrrrÿrÿòs„òrrÿcó—eZdZdZy)ÚBoundImportDescDataaÃHolds bound import descriptor data.
 
    This directory entry will provide information on the
    DLLs this PE file has been bound to (if bound at all).
    The structure will contain the name and timestamp of the
    DLL at the time of binding so that the loader can know
    whether it differs from the one currently present in the
    system and must, therefore, re-bind the PE's imports.
 
    struct:     IMAGE_BOUND_IMPORT_DESCRIPTOR structure
    name:       DLL name
    entries:    list of entries (BoundImportRefData instances)
                the entries will exist if this DLL has forwarded
                symbols. If so, the destination DLL will have an
                entry in this list.
    NrÃrcrrrrùs„òrrcó—eZdZdZy)ÚLoadConfigDataz°Holds Load Config data.
 
    struct:     IMAGE_LOAD_CONFIG_DIRECTORY structure
    name:       dll name
    dynamic_relocations: dynamic relocation information, if present
    NrÃrcrrrr rÄrrcó—eZdZdZy)ÚBoundImportRefDatazÞHolds bound import forwarder reference data.
 
    Contains the same information as the bound descriptor but
    for forwarded DLLs, if any.
 
    struct:     IMAGE_BOUND_FORWARDER_REF structure
    name:       dll name
    NrÃrcrrrrs„òrrcó—eZdZdZy)ÚExceptionsDirEntryDataz¢Holds the data related to SEH (and stack unwinding, in particular)
 
    struct      an instance of RUNTIME_FUNTION
    unwindinfo  an instance of UNWIND_INFO
    NrÃrcrrrr rërrcóf‡—eZdZdZd ˆfd„    Zˆfd„Zd ˆfd„    Zˆfd„Zd„Zd„Z    ˆfd„Z
d    „Z d
„Z ˆxZ S) Ú
UnwindInfoz•Handles the complexities of UNWIND_INFO structure:
    * variable number of UWIND_CODEs
    * optional ExceptionHandler and FunctionEntry fields
    c󬕗tt| d|¬«tt|«|_d|_t dd¬«|_d|_d|_    y)N)Ú UNWIND_INFO)z B:3,Versionz    B:5,FlagszB,SizeOfPrologzB,CountOfCodeszB:4,FrameRegisterzB:4,FrameOffset©rî©Ú UNWIND_CODE)ú B,CodeOffsetú B:4,UnwindOpú
B:4,OpInforF)
rnr    rorÚ
_full_sizeÚ_opt_field_namer‘Ú
_code_infoÚ_chained_entryÚ_finished_unpacking)rrrîrss  €rrozUnwindInfo.__init__.s`ø€Ü Œj˜$Ñ(ð
ð$ð    )ô     
ô ¤
¨DÑ8Ó:ˆŒØ#ˆÔÜ0Ø KØô
ˆŒð#ˆÔØ#(ˆÕ rc ó•—|jrytt||«|jdzdz}tt|«||j j «zz}||jdk(rdntdz|_    t|«|jkry|jdk7r'|jdk7rdt|j«zSg|_tt|«}|j}|dkDr |j j||||j j «z«tj!|j «}|€dt|j|z«zS|j#|j |«}|j j «|z}|j%|j ||||z||j|z«||z }||z}|jj'|«|dkDrŒ |j(s |j*rd    |_|j.rd
|_|j,dk7r;t1||j,t3j4d |||tdz«d«d |_y) z§Unpacks the UNWIND_INFO "in two calls", with the first call establishing
        a full size of the structure and the second, performing the actual unpacking.
        Nr7éþÿÿÿrrÈr?z&Unsupported version of UNWIND_INFO at zUnknown UNWIND_CODE at ÚExceptionHandlerÚ FunctionEntryú<IT)rrnr    rÚ CountOfCodesrrÚFlagsrÐrrDÚVersionÚhexrìÚ UnwindCodesÚPrologEpilogOpsFactoryÚcreateÚlength_in_code_structuresÚ
initializer”rrrrrrErF)
rrr.Ú codes_cnt_maxÚ hdlr_offsetÚroÚ
codes_leftÚucodeÚ len_in_codesÚopc_sizerss
         €rÚunpack_in_stageszUnwindInfo.unpack_in_stagesFsdø€ð × #Ò #Øä Œj˜$Ñ*¨4Ô0Ø×*Ñ*¨QÑ.°"Ñ4ˆ ä ”*˜dÑ *Ó ,¨}¸t¿¹×?UÑ?UÓ?WÑ/WÑ Wð    ð&Ø—‘˜q’‰AÔ&9¸#Ñ&>ñ
ˆŒô ˆt‹9t—‘Ò &Øà <‰<˜1Ò  §¡°Ò!2Ø;¼cÀ$×BVÑBVÓ>WÑWÐ WàˆÔÜ ”:˜tÑ +Ó -ˆØ×&Ñ&ˆ
ؘ1‹nØ O‰O× &Ñ & t¨B°°d·o±o×6LÑ6LÓ6NÑ1NÐ'OÔ PÜ*×1Ñ1°$·/±/ÓBˆE؈}Ø0´3°t×7KÑ7KÈbÑ7PÓ3QÑQÐQà ×:Ñ:¸4¿?¹?ÈDÓQˆLØ—‘×-Ñ-Ó/°,Ñ>ˆHØ × Ñ Ø—‘ؐR˜"˜x™-Ð(ØØ×$Ñ$ rÑ)ô     ð (‰NˆBØ ˜,Ñ &ˆJØ × Ñ × #Ñ # EÔ *ð!˜1Œnð$ × !Ò ! T×%;Ò%;Ø#5ˆDÔ  à × "Ò "Ø#2ˆDÔ  à × Ñ  4Ò 'Ü ØØ×$Ñ$Ü— ‘ ؘ$˜{¨[Ô;NÈsÑ;SÑ-SÐTóàñô ð$(ˆÔ àrc óô•—|jdk7rS|jtdz
|j|j<|jj |jg«    t t|#|«}|jdk7r|jj«    |j ddjtDcgc]}t||d«sŒ|d‘Œc}«z«|j ddj|jDcgc]}|j«sŒt|«‘Œ c}«z«|S#|jdk7r|jj«wwxYwcc}wcc}w)NrÈúFlags: ú, rzUnwind codes: z; )rrrÐrÛr¢r”rnr    rÚpoprÁÚunwind_info_flagsr
r Úis_validrT)rrr$rrÍrÄrss     €rrzUnwindInfo.dump„sIø€ð × Ñ  4Ò 'à—‘Ô"5°cÑ":Ñ:ð × "Ñ " 4×#7Ñ#7Ñ 8ð × Ñ × $Ñ $ d×&:Ñ&:Ð%;Ô <ð    (Üœ TÑ/° Ó<ˆDà×#Ñ# tÒ+Ø×!Ñ!×%Ñ%Õ'à  ‰ Ø Øi‰iÔ'8ÖP !¼GÀDÈ!ÈAÉ$Õ<O˜˜1›ÒPÓQñ Rô    
ð      ‰ Ø Øi‰i¨×)9Ñ)9ÖJ A¸Q¿Z¹Z½\œ˜QÒJÓKñ Lô    
ðˆ øð×#Ñ# tÒ+Ø×!Ñ!×%Ñ%Õ'ð,üò
QùòKs$Á%EÃE0ÃE0ÄE5Ä% E5Å,E-c󢕗|jdk7rS|jtdz
|j|j<|jj |jg«    t t|#«}|jdk7r|jj«|S#|jdk7r|jj«wwxYw)NrÈ)
rrrÐrÛr¢r”rnr    r,r0)rrr¬rss  €rr,zUnwindInfo.dump_dictŸsºø€Ø × Ñ  4Ò 'à—‘Ô"5°cÑ":Ñ:ð × "Ñ " 4×#7Ñ#7Ñ 8ð × Ñ × $Ñ $ d×&:Ñ&:Ð%;Ô <ð    (Üœ
 DÑ3Ó5ˆCà×#Ñ# tÒ+Ø×!Ñ!×%Ñ%Ô'؈
øð×#Ñ# tÒ+Ø×!Ñ!×%Ñ%Õ'ð,ús Á%B"Â",Ccóî—|dk(rt||t«nOd|vrKt||«r?|r|jdxxt|zcc<n|jdxxt|zcc<||j|<y)NrÚ    UNW_FLAG_)rar1rMr\ÚUNWIND_INFO_FLAGSrès   rrOzUnwindInfo.__setattr__¬sl€Ø 7Š?Ü d˜CÔ!2Õ 3Ø ˜DÑ  ¤W¨T°4Ô%8ÙØ— ‘ ˜gÓ&Ô*;¸DÑ*AÑAÔ&à— ‘ ˜gÓ&Ô*;¸DÑ*AÑAÓ&Ø!ˆ ‰ dÒrcó—|jSr)rrws rrzUnwindInfo.sizeof¶s €Ø‰Ðrcóx•—t|j«}tt|«|dtt|«tt|«}|j D]ƒ}||jj «z|jkDrnW|jj    «||||jj «z||jj «z }Œ…|jdk7rKtjdt||j««||jtdz
|j|S)NrrrÈ) rgrrnr    rrr rErr r
rÐ)rrr.Ú
cur_offsetÚucrss    €rrzUnwindInfo.__pack__¹sø€Ü˜Ÿ™Ó)ˆÜ5:¼:ÀtÑ5UÓ5WˆˆQ””z 4Ñ/Ó1Ð2Üœ: tÑ3Ó5ˆ
à×"Ñ"ò    -ˆBؘBŸI™I×,Ñ,Ó.Ñ.°·±Ò@ÙØACÇÁ×ASÑASÓAUˆD˜j¨2¯9©9×+;Ñ+;Ó+=Ñ=Ð >Ø ˜"Ÿ)™)×*Ñ*Ó,Ñ ,‰Jð        -ð × Ñ  4Ò 'ô— ‘ ˜D¤'¨$°×0DÑ0DÓ"EÓFð Ø—‘Ô"5°cÑ":Ñ:¸T¿_¹_ð ðˆ rcó—|jSr)rrws rÚget_chained_function_entryz%UnwindInfo.get_chained_function_entryËròrcóF—|jdk7r td«‚||_y)Nz(Chained function entry cannot be changed)rr’)rrÚentrys  rÚset_chained_function_entryz%UnwindInfo.set_chained_function_entryÎs$€Ø × Ñ  $Ò &ÜРJÓKÐ KØ#ˆÕrrÃ)ryrzr{r¤ror,rr,rOrrr<r?r|r}s@rr    r    (s6ø„ñõ
)ô0<õ|ô6 ò"òôò$#ö$rr    có(—eZdZdZd„Zd„Zd„Zd„Zy)ÚPrologEpilogOpz–Meant as an abstract class representing a generic unwind code.
    There is a subclass of PrologEpilogOp for each member of UNWIND_OP_CODES enum.
    có|—t|j|«|¬«|_|jj|«y)Nr )r‘Ú _get_formatrEr)rrÚunw_coder.Úunw_inforîs     rr$zPrologEpilogOp.initializeÙs2€Ü,Ø × Ñ ˜XÓ &°Kô
ˆŒ ð      ‰ ×јtÕ$rcó—y)zÄComputes how many UNWIND_CODE structures UNWIND_CODE occupies.
        May be called before initialize() and, for that reason, should not rely on
        the values of intance attributes.
        r7rc©rrrDrEs   rr#z(PrologEpilogOp.length_in_code_structuresßs€ð
rcó—y)NTrcrws rr2zPrologEpilogOp.is_validæs€Ørcó—y)Nr rc©rrrDs  rrCzPrologEpilogOp._get_formatés€ØNrN)ryrzr{r¤r$r#r2rCrcrrrArAÔs„ñò%ò òóOrrAcó—eZdZdZd„Zd„Zy)ÚPrologEpilogOpPushRegÚUWOP_PUSH_NONVOLcó—y)N)ÚUNWIND_CODE_PUSH_NONVOL)rrúB:4,RegrcrJs  rrCz!PrologEpilogOpPushReg._get_formatðs€ØWrcóB—dt|jjzS)Nz    .PUSHREG )Ú    REGISTERSrEÚRegrws rrˆzPrologEpilogOpPushReg.__str__ós€ØœY t§{¡{§¡Ñ7Ñ7Ð7rN)ryrzr{r¤rCrˆrcrrrLrLís„ÙòXó8rrLcó(—eZdZdZd„Zd„Zd„Zd„Zy)ÚPrologEpilogOpAllocLargeÚUWOP_ALLOC_LARGEcó8—dddd|jdk(rdffSdffS)NÚUNWIND_CODE_ALLOC_LARGErrrrzH,AllocSizeInQwordsz I,AllocSize©ÚOpInforJs  rrCz$PrologEpilogOpAllocLarge._get_formatúsB€à %àØØØ)1¯©¸AÒ)=Ð%ð     ð
ð    
ð DQð     ð
ð    
rcó(—|jdk(rdSdS)Nrr?rArYrGs   rr#z2PrologEpilogOpAllocLarge.length_in_code_structuress€Ø—O‘O qÒ(ˆqÐ/¨aÐ/rcó’—|jjdk(r|jjdzS|jjS)NrrK)rErZÚAllocSizeInQwordsÚ    AllocSizerws rÚget_alloc_sizez'PrologEpilogOpAllocLarge.get_alloc_sizesC€ð{‰{×!Ñ! QÒ&ð K‰K× )Ñ )¨AÑ -ð    
ð—‘×&Ñ&ð    
rcó:—dt|j««zS©Nz .ALLOCSTACK ©rr_rws rrˆz PrologEpilogOpAllocLarge.__str__󀨤 D×$7Ñ$7Ó$9Ó :Ñ:Ð:rN)ryrzr{r¤rCr#r_rˆrcrrrUrU÷s„Ùò    
ò0ò
ó;rrUcó"—eZdZdZd„Zd„Zd„Zy)ÚPrologEpilogOpAllocSmallÚUWOP_ALLOC_SMALLcó—y)N)ÚUNWIND_CODE_ALLOC_SMALL)rrzB:4,AllocSizeInQwordsMinus8rcrJs  rrCz$PrologEpilogOpAllocSmall._get_formató€ð
rcó:—|jjdzdzSr‚)rEÚAllocSizeInQwordsMinus8rws rr_z'PrologEpilogOpAllocSmall.get_alloc_sizes€Ø{‰{×2Ñ2°QÑ6¸Ñ:Ð:rcó:—dt|j««zSrarbrws rrˆz PrologEpilogOpAllocSmall.__str__rcrN)ryrzr{r¤rCr_rˆrcrrreres„Ùò
ò ;ó;rrecó(‡—eZdZdZˆfd„Zd„ZˆxZS)ÚPrologEpilogOpSetFPÚUWOP_SET_FPREGcó|•—tt| ||||«|j|_|j
dz|_y©Nr4)rnrnr$Ú FrameRegisterÚ_frame_registerÚ FrameOffsetÚ _frame_offset©rrrDr.rErîrss     €rr$zPrologEpilogOpSetFP.initialize&s?ø€Ü Ô! 4Ñ3Ø d˜H kô    
ð (×5Ñ5ˆÔØ%×1Ñ1°BÑ6ˆÕrcó`—dt|jzdzt|j«zS)Nz
.SETFRAME r/)rRrsrrurws rrˆzPrologEpilogOpSetFP.__str__-s:€à ܘ×,Ñ,Ñ-ñ .àñ ô$×$Ñ$Ó%ñ &ð    
r)ryrzr{r¤r$rˆr|r}s@rrnrn#sø„Ùô7ö
rrncó(—eZdZdZd„Zd„Zd„Zd„Zy)ÚPrologEpilogOpSaveRegÚUWOP_SAVE_NONVOLcó—y©Nr?rc)rrÚunwcoderEs   rr#z/PrologEpilogOpSaveReg.length_in_code_structures9ó€Ørcó4—|jjdzSr‚)rEÚOffsetInQwordsrws rÚ
get_offsetz PrologEpilogOpSaveReg.get_offset<s€Ø{‰{×)Ñ)¨AÑ-Ð-rcó—y)N)ÚUNWIND_CODE_SAVE_NONVOL)rrrPzH,OffsetInQwordsrcrJs  rrCz!PrologEpilogOpSaveReg._get_format?rircó|—dt|jjzdzt|j    ««zS©Nz    .SAVEREG r/)rRrErSrrrws rrˆzPrologEpilogOpSaveReg.__str__Es0€ØœY t§{¡{§¡Ñ7Ñ7¸$Ñ>ÄÀTÇ_Á_ÓEVÓAWÑWÐWrN©ryrzr{r¤r#rrCrˆrcrrryry6s„Ùòò.ò
ó Xrrycó(—eZdZdZd„Zd„Zd„Zd„Zy)ÚPrologEpilogOpSaveRegFarÚUWOP_SAVE_NONVOL_FARcó—y©NrArcrGs   rr#z2PrologEpilogOpSaveRegFar.length_in_code_structuresLr~rcó.—|jjSr©rEr*rws rrz#PrologEpilogOpSaveRegFar.get_offsetOó€Ø{‰{×!Ñ!Ð!rcó—y)N)ÚUNWIND_CODE_SAVE_NONVOL_FAR©rrrPzI,OffsetrcrJs  rrCz$PrologEpilogOpSaveRegFar._get_formatRrircóˆ—dt|jjzdzt|jj«zSr…)rRrErSrr*rws rrˆz PrologEpilogOpSaveRegFar.__str__Xs3€ØœY t§{¡{§¡Ñ7Ñ7¸$Ñ>ÄÀTÇ[Á[×EWÑEWÓAXÑXÐXrNr†rcrrrˆrˆIs„Ùòò"ò
ó Yrrˆcó(—eZdZdZd„Zd„Zd„Zd„Zy)ÚPrologEpilogOpSaveXMMÚUWOP_SAVE_XMM128có—y)N)ÚUNWIND_CODE_SAVE_XMM128)rrrPzH,OffsetIn2QwordsrcrJs  rrCz!PrologEpilogOpSaveXMM._get_format_rircó—yr|rcrGs   rr#z/PrologEpilogOpSaveXMM.length_in_code_structureser~rcó4—|jjdzSrq)rEÚOffsetIn2Qwordsrws rrz PrologEpilogOpSaveXMM.get_offseths€Ø{‰{×*Ñ*¨RÑ/Ð/rcó€—dt|jj«zdzt|j    ««zS©Nz.SAVEXMM128 XMMr/)rTrErSrrrws rrˆzPrologEpilogOpSaveXMM.__str__ks0€Ø ¤3 t§{¡{§¡Ó#7Ñ7¸$Ñ>ÄÀTÇ_Á_ÓEVÓAWÑWÐWrN©ryrzr{r¤rCr#rrˆrcrrr”r”\s„Ùò
ò ò0óXrr”có(—eZdZdZd„Zd„Zd„Zd„Zy)ÚPrologEpilogOpSaveXMMFarÚUWOP_SAVE_XMM128_FARcó—y)N)ÚUNWIND_CODE_SAVE_XMM128_FARr‘rcrJs  rrCz$PrologEpilogOpSaveXMMFar._get_formatrrircó—yr‹rcrGs   rr#z2PrologEpilogOpSaveXMMFar.length_in_code_structuresxr~rcó.—|jjSrrrws rrz#PrologEpilogOpSaveXMMFar.get_offset{rŽrcóŒ—dt|jj«zdzt|jj«zSrœ)rTrErSrr*rws rrˆz PrologEpilogOpSaveXMMFar.__str__~s3€Ø ¤3 t§{¡{§¡Ó#7Ñ7¸$Ñ>ÄÀTÇ[Á[×EWÑEWÓAXÑXÐXrNrrcrrrŸrŸos„Ùò
ò ò"óYrrŸcó—eZdZdZd„Zy)ÚPrologEpilogOpPushFrameÚUWOP_PUSH_MACHFRAMEcó@—d|jjrdzSdzS)Nz
.PUSHFRAMEz <code>rŠ)rErZrws rrˆzPrologEpilogOpPushFrame.__str__…s!€Ø¨D¯K©K×,>Ò,>˜yÑGÐGÀBÑGÐGrN)ryrzr{r¤rˆrcrrr§r§‚s „ÙóHrr§có@‡—eZdZdZˆfd„Zd„Zd„Zd„Zd„Zd„Z    ˆxZ
S)ÚPrologEpilogOpEpilogMarkerÚ UWOP_EPILOGcó•—d|_t|d« |_tt|||||«|jr8t |d|jj«|jdzdk(|_|j|_ y)NTÚ SizeOfEpilogr7r) Ú _long_offstrMÚ_firstrnr«r$rrEÚSizerZr®Ú _epilog_sizervs     €rr$z%PrologEpilogOpEpilogMarker.initializeŒsxø€ØˆÔÜ! (¨NÓ;Ð;ˆŒ Ü Ô(¨$Ñ:Ø d˜H kô    
ð ;Š;Ü H˜n¨d¯k©k×.>Ñ.>Ô ?Ø'Ÿ™°Ñ2°aÑ7ˆDÔ Ø$×1Ñ1ˆÕrcóN—|jrd|jdzdk(rdfSdfSy)NÚUNWIND_CODE_EPILOGr7)zB,OffsetLow,Sizerú    B:4,Flags)zB,Sizerrµú B,OffsetLowz
B:4,UnusedúB:4,OffsetHigh)r´)r¶rr·)r°rZrJs  rrCz&PrologEpilogOpEpilogMarker._get_format—sC€ð ;Š;à$à—?‘? QÑ&¨!Ò+ðBð ð ðð     ð ðrcóF—t|d«s|jdzdk(rdSdS)Nr®r7rr?)rMrZrGs   rr#z4PrologEpilogOpEpilogMarker.length_in_code_structures®s3€ô˜8 ^Ô4¸(¿/¹/ÈAÑ:MÐRSÒ9Sð ð    
ðð    
rcó‚—|jj|jr|jjdzzSdzS)NrKr)rEÚ    OffsetLowr¯Ú
OffsetHighrws rrz%PrologEpilogOpEpilogMarker.get_offsetµs@€Ø{‰{×$Ñ$Ø+/×+;Ò+;ˆDK‰K× "Ñ " aÑ 'ñ
ð    
ØABñ
ð    
rcó(—|j«dkDSr,)rrws rr2z#PrologEpilogOpEpilogMarker.is_validºs€Ø‰Ó  1Ñ$Ð$rcó–—|j«dkDr5dt|j«zdzt|j««zSdS)Nrz EPILOG: size=z, offset from the end=-rŠ)rrr²rws rrˆz"PrologEpilogOpEpilogMarker.__str__½sX€ð‰Ó  1Ò$ð     ܐ$×#Ñ#Ó$ñ %à'ñ (ô$—/‘/Ó#Ó$ñ %ð    
ð ð     
r) ryrzr{r¤r$rCr#rr2rˆr|r}s@rr«r«‰s$ø„Ùô    2òò.
ò
ò
%ö    
rr«cóL—eZdZdZeeeeee    e
e e e eeeeeeeeeei
Zed„«Zy)r!zBA factory for creating unwind codes based on the value of UnwindOpcóp—|j}|tjvrtj|«SdSr)ÚUnwindOpr!Ú _class_dict)r}Úcodes  rr"zPrologEpilogOpsFactory.createÙs@€à×шðÔ-×9Ñ9Ñ9ô #× .Ñ .¨tÑ 4Ó 6ð    
ðð    
rN)ryrzr{r¤rMrLrVrUrfrerornrzryr‰rˆr•r”r rŸr¨r§r¬r«rÁÚ staticmethodr"rcrrr!r!És^„ÙLð    Ð/ØÐ2ØÐ2ØÐ+ØÐ/ØÐ6ØÐ/ØÐ6ØÐ4ØÐ/ð €Kðñ
óñ
rr!z!#$%&'()-@^_`{}~+,.;=[]c󌇗|t|tttf«sytdzŠt ˆfd„t |«D««S)NFs\/c3ó&•K—|]}|‰v–—Œ
y­wrrc)r¿rÄÚalloweds  €rrÀz(is_valid_dos_filename.<locals>.<genexpr>øsøèø€Ò, ˆqGŒ|Ñ,ùsƒ)rSrTrUrgÚallowed_filenameÚallÚset)rÍrÆs @rÚis_valid_dos_filenamerÊós:ø€Ø€yœ
 1¤s¬E´9Ð&=Ô>Øä Ñ'€GÜ Ó,¤S¨£VÔ,Ó ,Ð,rrÍÚrelax_allowed_charactersrïc󐇗dŠ|rdŠ|duxr:t|tttf«xrt    ˆfd„t |«D««S)Ns    ._?@$()<>s!"#$%&'()*+,-./:<>?[\]^_`{|}~@c3ó:•K—|]}|tvxs|‰v–—Œy­wr)Úallowed_function_name)r¿rÄÚ allowed_extras  €rrÀz)is_valid_function_name.<locals>.<genexpr>    s$øèø€ÒSÀqÔ+Ð+ÒA¨q°MÐ/AÓAÑSùsƒ)rSrTrUrgrÈrÉ)rÍrËrÏs  @rÚis_valid_function_namerР   sNø€ð!€MÙØ;ˆ à    ˆ ò    TÜ qœ3¤¤yÐ1Ó 2ò    Tä ÓSÌCÐPQËFÔSÓ Sðrcóþ—eZdZdZdZdZdZdZdZdZ    dZ
d    Z d
Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)d)d)e+d*fd+„Z,d,„Z-d-„Z.d.„Z/d/„Z0d0„Z1d1„Z2d2„Z3d3„Z4d4„Z5d5„Z6d†d6„Z7d7„Z8    d‡d8„Z9d9„Z:d:„Z;d;„Z<d<„Z=d=„Z>d>„Z?d†d?„Z@d@„ZAdA„ZBdB„ZCdˆdC„ZDdD„ZEdE„ZFdF„ZGd‰dG„ZHdH„ZIdI„ZJdJ„ZKdŠdK„ZLdL„ZMdM„ZNd‰dN„ZO        d‹dO„ZPd‹dP„ZQdŒdQ„ZRdR„ZSddS„ZTdT„ZUdU„ZVeWfdV„ZXdW„ZYdX„ZZdŽdY„Z[dZ„Z\d[„Z]d\„Z^d]„Z_d^„Z`dd_„Zadd`„Zbda„Zcdb„Zddc„Zedd„Zfde„Zgdf„Zhdg„Zidh„Zjdi„Zkdj„Zldk„Zmdl„Zndm„Zodn„Zpdo„Zqdp„Zrdq„Zsdr„Ztds„Zudt„Zvdu„Zwdv„Zxdweydxezfdy„Z{dz„Z|d{„Z}d|„Z~d}„Zd~„Z€d„Zd€„Z‚d„Zƒd‚„Z„dƒ„Z…d„„Z†d…„Z‡y))‘ÚPEa“    A Portable Executable representation.
 
    This class provides access to most of the information in a PE file.
 
    It expects to be supplied the name of the file to load or PE data
    to process and an optional argument 'fast_load' (False by default)
    which controls whether to load all the directories information,
    which can be quite time consuming.
 
    pe = pefile.PE('module.dll')
    pe = pefile.PE(name='module.dll')
 
    would load 'module.dll' and process it. If the data is already
    available in a buffer the same can be achieved with:
 
    pe = pefile.PE(data=module_dll_data)
 
    The "fast_load" can be set to a default by setting its value in the
    module itself by means, for instance, of a "pefile.fast_load = True".
    That will make all the subsequent instances not to load the
    whole PE structure. The "full_load" method can be used to parse
    the missing data at a later stage.
 
    Basic headers information will be available in the attributes:
 
    DOS_HEADER
    NT_HEADERS
    FILE_HEADER
    OPTIONAL_HEADER
 
    All of them will contain among their attributes the members of the
    corresponding structures as defined in WINNT.H
 
    The raw data corresponding to the header (from the beginning of the
    file up to the start of the first section) will be available in the
    instance's attribute 'header' as a string.
 
    The sections will be available as a list in the 'sections' attribute.
    Each entry will contain as attributes all the structure's members.
 
    Directory entries will be available as attributes (if they exist):
    (no other entries are processed at this point)
 
    DIRECTORY_ENTRY_IMPORT (list of ImportDescData instances)
    DIRECTORY_ENTRY_EXPORT (ExportDirData instance)
    DIRECTORY_ENTRY_RESOURCE (ResourceDirData instance)
    DIRECTORY_ENTRY_DEBUG (list of DebugData instances)
    DIRECTORY_ENTRY_BASERELOC (list of BaseRelocationData instances)
    DIRECTORY_ENTRY_TLS
    DIRECTORY_ENTRY_BOUND_IMPORT (list of BoundImportData instances)
 
    The following dictionary attributes provide ways of mapping different
    constants. They will accept the numeric value and return the string
    representation and the opposite, feed in the string and get the
    numeric constant:
 
    DIRECTORY_ENTRY
    IMAGE_CHARACTERISTICS
    SECTION_CHARACTERISTICS
    DEBUG_TYPE
    SUBSYSTEM_TYPE
    MACHINE_TYPE
    RELOCATION_TYPE
    RESOURCE_TYPE
    LANG
    SUBLANG
    )ÚIMAGE_DOS_HEADER)z    H,e_magiczH,e_cblpzH,e_cpzH,e_crlcz H,e_cparhdrz H,e_minallocz H,e_maxalloczH,e_sszH,e_spzH,e_csumzH,e_ipzH,e_csz
H,e_lfarlczH,e_ovnoz8s,e_resz    H,e_oemidz H,e_oeminfoz
20s,e_res2z
I,e_lfanew)ÚIMAGE_FILE_HEADER)z    H,MachinezH,NumberOfSectionsúI,TimeDateStampzI,PointerToSymbolTablezI,NumberOfSymbolszH,SizeOfOptionalHeaderzH,Characteristics)ÚIMAGE_DATA_DIRECTORY)úI,VirtualAddressúI,Size)ÚIMAGE_OPTIONAL_HEADER)úH,MagicúB,MajorLinkerVersionúB,MinorLinkerVersionú I,SizeOfCodeúI,SizeOfInitializedDataúI,SizeOfUninitializedDataúI,AddressOfEntryPointú I,BaseOfCodez I,BaseOfDataz I,ImageBaseúI,SectionAlignmentúI,FileAlignmentúH,MajorOperatingSystemVersionúH,MinorOperatingSystemVersionúH,MajorImageVersionúH,MinorImageVersionúH,MajorSubsystemVersionúH,MinorSubsystemVersionú I,Reserved1ú I,SizeOfImageúI,SizeOfHeadersú
I,CheckSumú H,SubsystemúH,DllCharacteristicszI,SizeOfStackReservezI,SizeOfStackCommitzI,SizeOfHeapReservezI,SizeOfHeapCommitú I,LoaderFlagsúI,NumberOfRvaAndSizes)ÚIMAGE_OPTIONAL_HEADER64)rÚrÛrÜrÝrÞrßràráz Q,ImageBaserârãrärårærçrèrérêrërìrírîrïzQ,SizeOfStackReservezQ,SizeOfStackCommitzQ,SizeOfHeapReservezQ,SizeOfHeapCommitrðrñ)ÚIMAGE_NT_HEADERS)ú I,Signature)ÚIMAGE_SECTION_HEADER)
z8s,Namez,I,Misc,Misc_PhysicalAddress,Misc_VirtualSizer×zI,SizeOfRawDataúI,PointerToRawDatazI,PointerToRelocationszI,PointerToLinenumberszH,NumberOfRelocationszH,NumberOfLinenumbersúI,Characteristics)ÚIMAGE_DELAY_IMPORT_DESCRIPTOR)z    I,grAttrszI,szNamezI,phmodzI,pIATzI,pINTz I,pBoundIATz I,pUnloadIATz I,dwTimeStamp)ÚIMAGE_IMPORT_DESCRIPTOR)z$I,OriginalFirstThunk,CharacteristicsrÕzI,ForwarderChainúI,Namez I,FirstThunk)ÚIMAGE_EXPORT_DIRECTORY) r÷rÕúH,MajorVersionúH,MinorVersionrúzI,BasezI,NumberOfFunctionszI,NumberOfNameszI,AddressOfFunctionszI,AddressOfNameszI,AddressOfNameOrdinals)ÚIMAGE_RESOURCE_DIRECTORY)r÷rÕrürýzH,NumberOfNamedEntrieszH,NumberOfIdEntries)ÚIMAGE_RESOURCE_DIRECTORY_ENTRY)rúúI,OffsetToData)ÚIMAGE_RESOURCE_DATA_ENTRY)rrØz
I,CodePagez
I,Reserved)ÚVS_VERSIONINFO©zH,Lengthz H,ValueLengthzH,Type)ÚVS_FIXEDFILEINFO) rôzI,StrucVersionzI,FileVersionMSzI,FileVersionLSzI,ProductVersionMSzI,ProductVersionLSzI,FileFlagsMaskz I,FileFlagszI,FileOSz
I,FileTypez I,FileSubtypez I,FileDateMSz I,FileDateLS)ÚStringFileInfor)Ú StringTabler)ÚStringr)ÚVarr)ÚIMAGE_THUNK_DATA)z0I,ForwarderString,Function,Ordinal,AddressOfData)r    )z0Q,ForwarderString,Function,Ordinal,AddressOfData)ÚIMAGE_DEBUG_DIRECTORY)r÷rÕrürýzI,Typez I,SizeOfDatazI,AddressOfRawDatarö)ÚIMAGE_BASE_RELOCATION)r×z I,SizeOfBlock)ÚIMAGE_BASE_RELOCATION_ENTRY)zH,Data)Ú0IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION)úI:12,PageRelativeOffsetúI:1,IndirectCallz I:19,IATIndex)Ú/IMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION)rrzI:1,RexWPrefixz I:1,CfgCheckz I:1,Reserved)Ú+IMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION)rzI:4,RegisterNumber)ÚIMAGE_TLS_DIRECTORY)zI,StartAddressOfRawDatazI,EndAddressOfRawDatazI,AddressOfIndexzI,AddressOfCallBacksúI,SizeOfZeroFillr÷)r)zQ,StartAddressOfRawDatazQ,EndAddressOfRawDatazQ,AddressOfIndexzQ,AddressOfCallBacksrr÷)ÚIMAGE_LOAD_CONFIG_DIRECTORY)+rØrÕrürýúI,GlobalFlagsClearúI,GlobalFlagsSetúI,CriticalSectionDefaultTimeoutzI,DeCommitFreeBlockThresholdzI,DeCommitTotalFreeThresholdzI,LockPrefixTablezI,MaximumAllocationSizezI,VirtualMemoryThresholdúI,ProcessHeapFlagszI,ProcessAffinityMaskú H,CSDVersionú H,Reserved1z
I,EditListzI,SecurityCookiezI,SEHandlerTablezI,SEHandlerCountzI,GuardCFCheckFunctionPointerz I,GuardCFDispatchFunctionPointerzI,GuardCFFunctionTablezI,GuardCFFunctionCountú I,GuardFlagsúH,CodeIntegrityFlagsúH,CodeIntegrityCatalogúI,CodeIntegrityCatalogOffsetúI,CodeIntegrityReservedz I,GuardAddressTakenIatEntryTablez I,GuardAddressTakenIatEntryCountzI,GuardLongJumpTargetTablezI,GuardLongJumpTargetCountzI,DynamicValueRelocTablezI,CHPEMetadataPointerzI,GuardRFFailureRoutinez&I,GuardRFFailureRoutineFunctionPointerúI,DynamicValueRelocTableOffsetúH,DynamicValueRelocTableSectionú H,Reserved2z?I,GuardRFVerifyStackPointerFunctionPointerI,HotPatchTableOffsetú I,Reserved3zI,EnclaveConfigurationPointer)r),rØrÕrürýrrrzQ,DeCommitFreeBlockThresholdzQ,DeCommitTotalFreeThresholdzQ,LockPrefixTablezQ,MaximumAllocationSizezQ,VirtualMemoryThresholdzQ,ProcessAffinityMaskrrrz
Q,EditListzQ,SecurityCookiezQ,SEHandlerTablezQ,SEHandlerCountzQ,GuardCFCheckFunctionPointerz Q,GuardCFDispatchFunctionPointerzQ,GuardCFFunctionTablezQ,GuardCFFunctionCountrrrrrz Q,GuardAddressTakenIatEntryTablez Q,GuardAddressTakenIatEntryCountzQ,GuardLongJumpTargetTablezQ,GuardLongJumpTargetCountzQ,DynamicValueRelocTablezQ,CHPEMetadataPointerzQ,GuardRFFailureRoutinez&Q,GuardRFFailureRoutineFunctionPointerr r!r"z*Q,GuardRFVerifyStackPointerFunctionPointerzI,HotPatchTableOffsetr#zQ,EnclaveConfigurationPointer)ÚIMAGE_DYNAMIC_RELOCATION_TABLE)z    I,VersionrØ)ÚIMAGE_DYNAMIC_RELOCATION)úI,SymbolúI,BaseRelocSize)ÚIMAGE_DYNAMIC_RELOCATION64)úQ,Symbolr')ÚIMAGE_DYNAMIC_RELOCATION_V2)ú I,HeaderSizeúI,FixupInfoSizer&ú I,SymbolGroupúI,Flags)ÚIMAGE_DYNAMIC_RELOCATION64_V2)r+r,r)r-r.)ÚIMAGE_BOUND_IMPORT_DESCRIPTOR)rÕúH,OffsetModuleNamezH,NumberOfModuleForwarderRefs)ÚIMAGE_BOUND_FORWARDER_REF)rÕr1z
H,Reserved)ÚRUNTIME_FUNCTION)zI,BeginAddressz I,EndAddressz I,UnwindDataNéxcó¸—||_||_d|_g|_g|_d|_|€ |€ t d«‚g|_d|_d|_    d|_
d|_ d|_ d|_ tjtj tj"dœ|_||n t'«d}    |j)|||«y#|j+«‚xYw)NzMust supply either name or dataFr)rArCrEÚ    fast_load)Úmax_symbol_exportsÚmax_repeated_symbolÚ_get_section_by_rva_last_usedÚsectionsÚ _PE__warningsrÍr!Ú__structures__Ú_PE__from_fileÚFileAlignment_WarningÚSectionAlignment_WarningÚ!_PE__total_resource_entries_countÚ_PE__total_resource_bytesÚ_PE__total_import_symbolsrÒÚ;__IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION_format__Ú:__IMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION_format__Ú6__IMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION_format__Ú#dynamic_relocation_format_by_symbolÚglobalsÚ    __parse__Úclose)rrrír.r6r7r8s      rroz PE.__init__ sê€ð#5ˆÔØ#6ˆÔ à-1ˆÔ*àˆŒ àˆŒàˆŒ à ˆ<˜D˜LÜÐ>Ó?Ð ?ð
!ˆÔ؈Ôð&+ˆÔ"Ø(-ˆÔ%ð/0ˆÔ+ð'(ˆÔ#à&'ˆÔ#ô×MÑMÜ×LÑLÜ×HÑHñ4
ˆÔ0ð "+Ð!6‘I¼G»IÀkÑ<Rˆ    ð    Ø N‰N˜4  yÕ 1øð    Ø J‰JŒLØ ús Â2CÃCcó—|Srrcrws rÚ    __enter__z PE.__enter__T s€Øˆ rcó$—|j«yr)rI)rrrùr`Ú    tracebacks    rÚ__exit__z PE.__exit__W s €Ø 
‰
 rcó:—|jdurt|d«r€ttjt«r$t|j
tj«s dt t    |j
««vr|j
j«|`yyyy)NTrEz    mmap.mmap)r=rMrSÚmmaprùrEr¨rIrws rrIzPE.closeZ su€à × Ñ  Ñ $ܘ˜jÔ)äœDŸI™I¤tÔ,´¸D¿M¹MÌ4Ï9É9Ô1Uؤ$¤t¨D¯M©MÓ':Ó";Ñ;ð M‰M× Ñ Ô !Ø‘ ð    <ð*ð %rcó—t||¬«}    |j|«|j j    |«|S#t$r9}|jj    dj |d||««Yd}~yd}~wwxYw©zyApply structure format to raw data.
 
        Returns an unpacked structure object if successful, None otherwise.
        r z7Corrupt header "{0}" at file offset {1}. Exception: {2}rN)rèrr’r;r”r•r<©rrr•r.rîÚ    structureÚerrs      rÚ__unpack_data__zPE.__unpack_data__f s€ô ˜f°+Ô>ˆ    ð    Ø ×  Ñ   Ô &ð     ×Ñ×"Ñ" 9Ô-àÐøôò    Ø O‰O× "Ñ "ØI×PÑPؘ1‘I˜{¨Cóô ô
ûð     úó=½    A?Á/A:Á:A?có—t||¬«}    |j|«|j j    |«|S#t$r9}|jj    dj |d||««Yd}~yd}~wwxYwrR)r‘rr’r;r”r•r<rSs      rÚ__unpack_data_with_bitfields__z!PE.__unpack_data_with_bitfields__| s€ô +¨6¸{ÔKˆ    ð    Ø ×  Ñ   Ô &ð     ×Ñ×"Ñ" 9Ô-àÐøôò    Ø O‰O× "Ñ "ØI×PÑPؘ1‘I˜{¨Cóô ô
ûð     úrWc
óX—|ètj|«}|jdk(r td«‚d}    t    |d«}|j «|_t td«r5tj|j
dtj«|_    n5tj|j
dtj¬«|_    d|_     |!|j«n|||_    d |_ t!|j«|_d |_|sºt't)|j««j+«D]‹\}}    |dk(r|    t!|j«z d kDs"|dk7sŒ,|    t!|j«z d kDsŒH|j,j/dj|d|    zt!|j«z ««Œ|jdd}
t!|
«dk7r td«‚|j1|j2|
d¬«|_|j4j6t8k(r td«‚|j4r|j4j6t:k7r td«‚|j4j<t!|j«kDr td«‚|j4j<} |j1|j>|j| | dz| ¬«|_ |j@r|j@jBs td«‚d|j@jBztDk(r td«‚d|j@jBztFk(r td«‚d|j@jBztHk(r td«‚d|j@jBztJk(r td«‚|j@jBtLk7r td«‚|j1|jN|j| dz| dzdz| dz¬«|_(tStTd «} |jPs td!«‚tW|jP|jPjX| «| dz|jPj[«z} | |jPj\z}|j1|j^|j| | d"z| ¬«|_0d#}|j`€[t!|j| | d$z«|k\r=d%}|j| | d$zd&|zz}|j1|j^|| ¬«|_0|j`í|j`jbtdk(r td|_3nÄ|j`jbthk(r§th|_3|j1|jj|j| | d$z| ¬«|_0d'}|j`€[t!|j| | d$z«|k\r=d%}|j| | d$zd&|zz}|j1|jj|| ¬«|_0|jPs td!«‚|j`€ td(«‚|jf€>|j,j/d)j|j`jb««tStld*«}tW|j`|j`jn|«g|j`_8| |j`j[«z}|jP|j@_(|j`|j@_0|j`jr|j`jtkr|j,j/d+«|j`jvd,kDr2|j,j/d-|j`jvz«d"}tyt{d.|j`jvz««D]í}t!|j«|z
dk(rnÐt!|j«|z
dkr|j|dd/z}n|j|||z}|j1|j|||¬«}|€nn    t~||_@||j[«z }|j`jpj/|«|| |j`j[«zd%zk\sŒín|j‡|«}|jˆDcgc]A}|jŠdkDr0|j|jŠ|j`jŽ«‘ŒC}}t!|«dkDr t‘|«}nd}|r||kr|jd||_In|jd||_I|j•|j`jr«    p|j—|j`jr«}|t!|j«kDre|j,j/d0|j`jrz«n2|j,j/d1|j`jrz«|s|j™«yy#t$r:}dj|«}|xrd    |z}td
j||««‚d}~wwxYw#||j«wwxYw#t‚t„f$rYŒwxYwcc}w)2z¤Parse a Portable Executable file.
 
        Loads a PE file, parsing all its structures and making them available
        through the instance's attributes.
        NrzThe file is emptyÚrbÚ MAP_PRIVATE)ÚaccessTr¾z: %szUnable to access file '{0}'{1}Fgà?g333333Ã?zeByte 0x{0:02x} makes up {1:.4f}% of the file's contents. This may indicate truncation / malformation.gY@raz9Unable to read the DOS Header, possibly a truncated file.r z)Probably a ZM Executable (not a PE file).zDOS Header magic not found.z.Invalid e_lfanew value, probably not a PE filerKzNT Headers not found.rÊz0Invalid NT Headers signature. Probably a NE filez0Invalid NT Headers signature. Probably a LE filez0Invalid NT Headers signature. Probably a LX filez0Invalid NT Headers signature. Probably a TE filezInvalid NT Headers signature.rCr3Ú IMAGE_FILE_zFile Header missingrerCr!rcrr z5No Optional Header found, invalid PE32 or PE32+ file.z*Invalid type 0x{0:04x} in Optional Header.ÚIMAGE_DLLCHARACTERISTICS_zXSizeOfHeaders is smaller than AddressOfEntryPoint: this file cannot run under Windows 8.r4zsSuspicious NumberOfRvaAndSizes in the Optional Header. Normal values are never larger than 0x10, the value is: 0x%xéÿÿÿsz[Possibly corrupt file. AddressOfEntryPoint lies outside the file. AddressOfEntryPoint: 0x%xzTAddressOfEntryPoint lies outside the sections' boundaries. AddressOfEntryPoint: 0x%x)MÚosÚstatÚst_sizer’ÚopenÚfilenorMrPr\rEÚ ACCESS_READr=ÚIOErrorr•Ú    ExceptionrIrDÚ$_PE__resource_size_limit_upperboundsÚ _PE__resource_size_limit_reachedrrgr¿r;r”rVÚ__IMAGE_DOS_HEADER_format__Ú
DOS_HEADERÚe_magicÚIMAGE_DOSZM_SIGNATUREÚIMAGE_DOS_SIGNATUREÚe_lfanewÚ__IMAGE_NT_HEADERS_format__Ú
NT_HEADERSrÚIMAGE_NE_SIGNATUREÚIMAGE_LE_SIGNATUREÚIMAGE_LX_SIGNATUREÚIMAGE_TE_SIGNATUREÚIMAGE_NT_SIGNATUREÚ__IMAGE_FILE_HEADER_format__Ú FILE_HEADERrZÚIMAGE_CHARACTERISTICSrarJrÚSizeOfOptionalHeaderÚ __IMAGE_OPTIONAL_HEADER_format__r=ÚMagicrÎrÍrÐÚ"__IMAGE_OPTIONAL_HEADER64_format__ÚDLL_CHARACTERISTICSÚDllCharacteristicsÚDATA_DIRECTORYÚAddressOfEntryPointÚ SizeOfHeadersÚNumberOfRvaAndSizesr¤r#Ú__IMAGE_DATA_DIRECTORY_format__ÚDIRECTORY_ENTRYríÚKeyErrorÚAttributeErrorÚparse_sectionsr:r1r<r>rpÚheaderÚget_section_by_rvarTÚ    full_load)rrÚfnamer.r6rbÚfdÚexcpÚ exception_msgÚbyteÚ
byte_countÚdos_header_dataÚnt_headers_offsetÚ image_flagsÚoptional_header_offsetÚsections_offsetÚ&MINIMUM_VALID_OPTIONAL_HEADER_RAW_SIZEÚpadding_lengthÚ padded_dataÚdll_characteristics_flagsrÞÚ)MAX_ASSUMED_VALID_NUMBER_OF_RVA_AND_SIZESrLÚ    dir_entryrÍÚrawDataPointersÚlowest_section_offsetÚ    ep_offsets                           rrHz PE.__parse__’ s 
€ð Ð Ü—7‘7˜5“>ˆD؏|‰|˜qÒ Ü#Ð$7Ó8Ð8؈Bð ܘ% Ó&Ø Ÿi™i›k” Üœ4 Ô/ä$(§I¡I¨d¯k©k¸1¼d×>NÑ>NÓ$OD•Mô%)§I¡I¨d¯k©k¸1ÄT×EUÑEUÔ$VD”MØ#'Õ ð>Ø—H‘H•JØ Ð Ø ˆDŒMØ$ˆDÔ ô25°T·]±]Ó1CˆÔ.Ø-2ˆÔ*áÜ$+¬I°d·m±mÓ,DÓ$E×$KÑ$KÓ$Mò Ñ jð
˜A’I *¬s°4·=±=Ó/AÑ"AÀCÒ"GؘA“I *¬s°4·=±=Ó/AÑ"AÀDÓ"Hà—O‘O×*Ñ*ðLç ™&  u¨zÑ'9¼CÀÇ Á Ó<NÑ'NÓOõ    ð ðŸ-™-¨¨Ð,ˆÜ ˆÓ  2Ò %ÜØKóð ð×.Ñ.Ø × ,Ñ ,¨oÈ1ð/ó
ˆŒð ?‰?× "Ñ "Ô&;Ò ;ÜРKÓLÐ LØŠ $§/¡/×"9Ñ"9Ô=PÒ"PÜР=Ó>Ð >ð
?‰?× #Ñ #¤c¨$¯-©-Ó&8Ò 8ÜРPÓQÐ Qà ŸO™O×4Ñ4Ðà×.Ñ.Ø × ,Ñ ,Ø M‰MÐ+Ð.?À!Ñ.CÐ DØ)ð/ó
ˆŒðŠ d§o¡o×&?Ò&?ÜР7Ó8Ð 8à T—_‘_×.Ñ.Ñ .Ô3EÒ EÜРRÓSÐ SØ T—_‘_×.Ñ.Ñ .Ô3EÒ EÜРRÓSÐ SØ T—_‘_×.Ñ.Ñ .Ô3EÒ EÜРRÓSÐ SØ T—_‘_×.Ñ.Ñ .Ô3EÒ EÜРRÓSÐ SØ ?‰?× $Ñ $Ô(:Ò :ÜР?Ó@Ð @à×/Ñ/Ø × -Ñ -Ø M‰MÐ+¨aÑ/Ð2CÀaÑ2GÈ"Ñ2LÐ MØ)¨AÑ-ð0ó
ˆÔô
%Ô%:¸MÓJˆ à×ÒÜР5Ó6Ð 6ô    $×"Ñ" D×$4Ñ$4×$DÑ$DÀkÔRà!2°QÑ!6¸×9IÑ9I×9PÑ9PÓ9RÑ!RÐð1°4×3CÑ3C×3XÑ3XÑXˆà#×3Ñ3Ø × 1Ñ 1à M‰MÐ0Ð3IÈCÑ3OÐ PØ.ð     4ó 
ˆÔð 24Ð.ð ×  Ñ  Ð (ÜØ— ‘ Ð4Ð7MÐPUÑ7UÐVóð6ò6ð!ˆNðŸ-™-Ø&Ð)?À%Ñ)Gðà˜Ñ'ñ)ˆKð$(×#7Ñ#7Ø×5Ñ5ØØ2ð$8ó$ˆDÔ  ð × Ñ Ð +à×#Ñ#×)Ñ)Ô-EÒEä7• à×%Ñ%×+Ñ+Ô/LÒLä<” à'+×';Ñ';Ø×;Ñ;Ø—M‘MØ.Ð1GÈ%Ñ1Oðð!7ð (<ó(Ô$ð:@Ð6ð×(Ñ(Ð0ÜØŸ ™ Ø2Ð5KÈeÑ5Sðóð
>ò >ð&)NØ"&§-¡-Ø.Ð1GÈ%Ñ1Oð#à Ñ/ñ#1Kð,0×+?Ñ+?Ø×?Ñ?Ø#Ø$:ð,@ó,DÔ(ð ×ÒÜР5Ó6Ð 6ð
× Ñ Ð 'ÜРWÓXÐ XØ <‰<Ð Ø O‰O× "Ñ "Ø<×CÑCØ×(Ñ(×.Ñ.óô ô %3Ü Ð!<ó%
Ð!ô
    Ø ×  Ñ  Ø ×  Ñ  × 3Ñ 3Ø %ô    
ð /1ˆ×ÑÔ+à'¨$×*>Ñ*>×*EÑ*EÓ*GÑGˆà&*×&6Ñ&6ˆ‰Ô#Ø*.×*>Ñ*>ˆ‰Ô'ð
×  Ñ  × 4Ñ 4Ø×"Ñ"×0Ñ0ò 1ð O‰O× "Ñ "ð.ô ð × Ñ × 3Ñ 3°dÒ :Ø O‰O× "Ñ "ðOà×&Ñ&×:Ñ:ñ;ô ð 5:Ð1Ü”s˜:¨×(<Ñ(<×(PÑ(PÑPÓQÓRò+    ˆAä4—=‘=Ó! FÑ*¨aÒ/Ùä4—=‘=Ó! FÑ*¨QÒ.Ø—}‘} V WÐ-°    Ñ9‘à—}‘}ؘVÐ&OÑOðð×,Ñ,Ø×4Ñ4°dÈð-óˆIðРÙð Ü!0°Ñ!3    ”ð i×&Ñ&Ó(Ñ (ˆFà ×  Ñ  × /Ñ /× 6Ñ 6°yÔ AðØ&¨×)=Ñ)=×)DÑ)DÓ)FÑFÈÑOóñðW+    ðZ×$Ñ$ _Ó5ˆð—]‘]ö    
ðØ×!Ñ! AÒ%ð     × %Ñ %Ø×"Ñ" D×$8Ñ$8×$FÑ$Fõ ð
ˆð
ô ˆÓ  !Ò #Ü$'¨Ó$8Ñ !à$(Ð !á$Ð(=ÀÒ(FØŸ-™-¨¨Ð0ˆDKàŸ-™-Ð(>Ð)>Ð?ˆDŒKð
× #Ñ # D×$8Ñ$8×$LÑ$LÓ MØð ð ×0Ñ0Ø×$Ñ$×8Ñ8óˆIðœ3˜tŸ}™}Ó-Ò-à—‘×&Ñ&ð7à×*Ñ*×>Ñ>ñ?õð O‰O× "Ñ "ð,Ø.2×.BÑ.B×.VÑ.VñWô ñ
Ø N‰NÕ ðøôo
ò Ø %§ ¡ ¨TÓ 2 Ø -Ò J°6¸MÑ3I ÜØ4×;Ñ;¸EÀ=ÓQóðûð ûð>Ø—H‘H•Jð"ûôHœnÐ-ò Ûð üò>
s=µB"j2â6låAl'ê2    k5ê;5k0ë0k5ë5k8ë8l ìl$ì#l$c ó2—d}d}|jjdd|jj««}|dk(ry    |jd|dz}|ddt    t |«dz «z}t tjd    jt    t |«dz ««|««}||vry    tjd
||j|«d z«}d |i}|d|jd«}||d <d„}    t«}
t|«D]4\} } |
j|    | «|    || t |«z«z «Œ6t!|
«|d<|d } |d| z |k7s|d| k7s|d| k7ry| |d<g}||d<|dd}t#t    t |«dz ««D]U}|d|z|k(r,|d|zd z| k7r|j$jd«|S||d|z| z |d|zd z| z gz }ŒW|S#t$rYywxYw)a"Parses the rich header
        see http://www.ntcore.com/files/richsign.htm for more information
 
        Structure:
        00 DanS ^ checksum, checksum, checksum, checksum
        10 Symbol RVA ^ checksum, Symbol size ^ checksum...
        ...
        XX Rich, checksum, 0, 0,...
        iDanSiRichsRichrcéÿÿÿÿNrKrCz<{0}Iú<Lr7rÚraw_datacó<—t|t«s t|«S|Sr)rSr#r)rÄs rú<lambda>z&PE.parse_rich_header.<locals>.<lambda>0 s€¤z°!´SÔ'9œ˜Q›€¸q€rÚ
clear_datarr?rAÚchecksumrkzRich Header is malformed)rEÚfindr=rûr#rDÚlistrErFr•r’r Úindexrgrr”rUr¤r;)rrÚDANSÚRICHÚ
rich_indexÚ    rich_datar.rÚresultr¤Úord_r§rr$r¨Ú headervaluesrLs                rÚparse_rich_headerzPE.parse_rich_header s{€ðˆØˆà—]‘]×'Ñ'Ø T˜4×/Ñ/×?Ñ?ÓAó
ˆ
ð ˜Ò Øð    ðŸ ™  d¨Z¸!©^Ð<ˆIð"Ð"? A¬¬C°    «N¸QÑ,>Ó(?Ñ$?Ð@ˆIÜÜ— ‘ ˜gŸn™n¬S´°Y³À!Ñ1CÓ-DÓEÀyÓQóˆDð˜4ÑØð ô k‰k˜$  T§Z¡Z°Ó%5¸Ñ%9Ñ :Ó;ˆØ˜ˆàÐ6˜yŸ~™~¨gÓ6Ð7ˆØ%ˆˆzÑá@ˆä“[ˆ
Ü! (Ó+ò    G‰HˆCØ × Ñ ™t C›y©4°°C¼#¸c»(±NÑ0CÓ+DÑDÕ Fð    Gä$ ZÓ0ˆˆ|Ñð˜‘7ˆØ ‰7XÑ  Ò %¨¨a©°HÒ)<ÀÀQÁÈ8Ò@SØà%ˆˆzÑØˆ Ø'ˆˆxÑàABˆxˆÜ”sœ3˜t›9 q™=Ó)Ó*ò    QˆAðA˜‘E‰{˜dÒ"ð˜˜A™ ™    ‘? hÒ.Ø—O‘O×*Ñ*Ð+EÔFØð
ˆ ð ˜T ! a¡%™[¨8Ñ3°T¸!¸a¹%À!¹)±_ÀxÑ5OÐPÑ P‰Lð    Qðˆ øôWò    Ùð    úsÁA6H
È
    HÈHcó—|jS)zºReturn the list of warnings.
 
        Non-critical problems found when parsing the PE file are
        appended to a list of warnings. This method returns the
        full list.
        )r;rws rr“zPE.get_warningsS s€ð‰Ðrcó>—|jD]}td|«Œy)zËPrint the list of warnings.
 
        Non-critical problems found when parsing the PE file are
        appended to a list of warnings. This method prints the
        full list to standard output.
        ú>N)r;Úprint)rrÚwarnings  rÚ show_warningszPE.show_warnings] s!€ð—‘ò     ˆGÜ #wÕ ñ     rcóΗ|j«Gd„d«}|j«}|r²|«|_|jdd«|j_|jdd«|j_|jdd«|j_|jdd«|j_|jdd«|j_yd|_y)    z§Process the data directories.
 
        This method will load the data directories which might not have
        been loaded if the "fast_load" option was used.
        có —eZdZy)ú PE.full_load.<locals>.RichHeaderN)ryrzr{rcrrÚ
RichHeaderr¼q s„Ø rr½r¨Nrkrr¤r§)    Úparse_data_directoriesr³Ú RICH_HEADERr;r¨rkrr¤r§)rrr½Ú rich_headers   rrŒz PE.full_loadh s¼€ð     ×#Ñ#Ô%÷    ñ    ð×,Ñ,Ó.ˆ Ù Ù)›|ˆDÔ Ø(3¯©¸
ÀDÓ(IˆD× Ñ Ô %Ø&1§o¡o°hÀÓ&EˆD× Ñ Ô #Ø#.§?¡?°5¸$Ó#?ˆD× Ñ Ô  Ø(3¯©¸
ÀDÓ(IˆD× Ñ Ô %Ø*5¯/©/¸,ÈÓ*MˆD× Ñ Õ 'à#ˆDÕ rc óh—t|j«}|jD]<}t|j««}|j    «}||||t |«zŒ>t |d«rt |d«r|jD]ö}|D]ï}t |d«sŒ|jD]Ñ}t|jj««D]©\}    }|j|    }
|j|    } t |«| dkDr>|jd«jd«} | d| ddz||
d|
d| ddzzŒs|jd«jd«} | ||
d|
dt | «zŒ«ŒÓŒñŒø|}|s|St!|d    «}|j#|«|j%«y)
a…Write the PE file.
 
        This function will process all headers and components
        of the PE file and include all changes made (by just
        assigning to attributes in the PE objects) and write
        the changes back to a file whose name is provided as
        an argument. The filename is optional, if not
        provided the data will be returned as a 'str' object.
        rÚFileInforr7r‡rCNr?zwb+)rgrEr<rrûrDrMrÂrrªÚentriesr¿Úentries_offsetsÚentries_lengthsrHrirdÚwriterI)rrÚfilenameÚ    file_datarTÚ struct_datarÞÚfinfor>Úst_entryrÚoffsetsÚlengthsrKÚ encoded_dataÚ new_file_datars                rrÆzPE.write sÜ€ô˜dŸm™mÓ,ˆ    à×,Ñ,ò    HˆIÜ# I×$6Ñ$6Ó$8Ó9ˆKØ×.Ñ.Ó0ˆFØ<GˆIf˜v¬¨KÓ(8Ñ8Ñ 9ð    Hô
4Ð)Õ *ܐt˜ZÕ(Ø!Ÿ]™]ò9EØ!&ò9˜Ü" 5¨-Õ8Ø,1×,=Ñ,=ò9 Ü26°x×7GÑ7G×7MÑ7MÓ7OÓ2Pò!9¡J C¨ð /7×.FÑ.FÀsÑ.K GØ.6×.FÑ.FÀsÑ.K Gä'*¨5£z°G¸A±JÒ'>Ø,1¯L©L¸Ó,A×,HÑ,HÈÓ,T¨ð-.Ð.>°¸±
¸Q±Ð,?ð)2Ø,3°A©J¸À¹ÀgÈaÁjÐSTÁnÑ9Tñ)*ð8=·|±|ÀGÓ7L×7SÑ7SØ,6ó8*¨ ð
-9ð)2Ø,3°A©J¸À¹ÄcÈ,ÓFWÑ9Wñ)*ñ%!9ñ9ñ9ð9ð4"ˆ ÙØ Ð  ä ˜5Ó !ˆØ    ‰ ÔØ    ‰Œ    Ørcóî    —g|_d}t|jj«D]î}|tk\rF|j
j dj|jjt««nŸd}t|j|¬«}|sn||j«|zz}|j|«|j|||j«z}t|«|j«k(r"|j
j d|›d«nü|s"|j
j d|›d«nØ|j|«|jj |«|j |j"zt%|j«kDr$|dz }|j
j d    |›d
«|j'|j"|j(j*«t%|j«kDr$|dz }|j
j d    |›d «|j,d kDr$|dz }|j
j d |›d«|j/|j0|j(j2|j(j*«d kDr$|dz }|j
j d |›d«|j(j*dk7rJ|j"|j(j*zdk7r$|dz }|j
j d    |›d«||k\r|j
j d«nËt5t6d«}t9||j:|«|j<j?dd«rj|j<j?dd«rN|j@jCd«dk(r|jE«rn|j
j d|›d«|jj |«Œñ|jjGd„¬«tI|j«D]I\}    }|    t%|j«dz
k(rd|_%Œ)|j|    dzj0|_%ŒK|jjdkDrC|jr7||jdj«|jjzzS|S)aFetch the PE file sections.
 
        The sections will be readily available in the "sections" attribute.
        Its attributes will contain all the section information plus "data"
        a buffer containing the section's data.
 
        The "Characteristics" member will be processed and attributes
        representing the section characteristics (with the 'IMAGE_SCN_'
        string trimmed from the constant's names) will be added to the
        section instance.
 
        Refer to the SectionStructure class for additional info.
        rAzToo many sections {0} (>={1})r)rzInvalid section z. Contents are null-bytes.z8. No data in the file (is this corkami's virtsectblXP?).r7zError parsing section z$. SizeOfRawData is larger than file.z5. PointerToRawData points beyond the end of the file.rz'Suspicious value found parsing section z*. VirtualSize is extremely large > 256MiB.z&. VirtualAddress is beyond 0x10000000.z•. PointerToRawData should normally be a multiple of FileAlignment, this might imply the file is trying to confuse tools which parse this incorrectly.z,Too many warnings parsing section. Aborting.rKr FržrsPAGEz!Suspicious flags set for section zf. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.có—|jSr)r2)Úas rr¦z#PE.parse_sections.<locals>.<lambda>4s €¨×)9Ñ)9€r)rN)&r:r¤ryÚNumberOfSectionsÚ MAX_SECTIONSr;r”r•r/Ú__IMAGE_SECTION_HEADER_format__rrþrEr/rr<r3r1rDr<r=r>r4rAr2rBrZrLrarJr\r;ÚNamer"Ú    is_driverÚsortrrX)
rrrÞÚMAX_SIMULTANEOUS_ERRORSrLÚsimultaneous_errorsÚsectionÚsection_offsetÚ section_datarNrs
          rr‰zPE.parse_sections¶ s¸€ðˆŒ Ø"#Ðܐt×'Ñ'×8Ñ8Ó9óh    *ˆAØ”LÒ Ø—‘×&Ñ&Ø3×:Ñ:Ø×(Ñ(×9Ñ9¼<óôò
Ø"#Ð Ü& t×'KÑ'KÐPTÔUˆGÙÚØ# g§n¡nÓ&6¸Ñ&:Ñ:ˆNØ × #Ñ # NÔ 3ØŸ=™=Ø °'·.±.Ó2BÑ!BðˆLô˜LÓ)¨W¯^©^Ó-=Ò=Ø—‘×&Ñ&Ð)9¸!¸Ð<VÐ'WÔXÚÙØ—‘×&Ñ&Ø& q cð*&ð&ôòØ × Ñ ˜|Ô ,Ø × Ñ × &Ñ & wÔ /à×$Ñ$ w×'?Ñ'?Ñ?Ä#ÀdÇmÁmÓBTÒTØ# qÑ(Ð#Ø—‘×&Ñ&Ø,¨Q¨CÐ/SÐTôð×(Ñ(Ø×(Ñ(¨$×*>Ñ*>×*LÑ*LóäD—M‘MÓ"ò#ð$ qÑ(Ð#Ø—‘×&Ñ&Ø,¨Q¨Cð0+ð+ôð
×'Ñ'¨*Ò4Ø# qÑ(Ð#Ø—‘×&Ñ&Ø=¸a¸SðA0ð0ôð ×,Ñ,Ø×*Ñ*Ø×(Ñ(×9Ñ9Ø×(Ñ(×6Ñ6óð
ò ð$ qÑ(Ð#Ø—‘×&Ñ&Ø=¸a¸SðA)ð)ôð ×$Ñ$×2Ñ2°aÒ7Ø×-Ñ-°×0DÑ0D×0RÑ0RÑRÐWXÒXà# qÑ(Ð#Ø—‘×&Ñ&à0°°ð4SðSôð#Ð&=Ò=Ø—‘×&Ñ&Ð'UÔVÙä*Ô+BÀLÓQˆMô g˜w×6Ñ6¸ Ô Fà×Ñ×#Ñ#Ø% uôà×"Ñ"×&Ñ&Ð'>ÀÔFà—<‘<×&Ñ& wÓ/°7Ò:¸t¿~¹~Ô?Oðà—O‘O×*Ñ*Ø;¸A¸3ð?CðCôð M‰M×  Ñ   Ö )ðQh    *ðZ      ‰ ×ÑÑ9ÐÔ:Ü% d§m¡mÓ4ò    !‰LˆCØ”c˜$Ÿ-™-Ó(¨1Ñ,Ò,Ø7;Õ4à7;·}±}ؘ!‘Gñ8ç ‘.ðÕ4ð        !ð × Ñ × ,Ñ ,¨qÒ 0°T·]²]à˜Ÿ™ qÑ)×0Ñ0Ó2°T×5EÑ5E×5VÑ5VÑVÑVð ðˆMrc óÒ—d|jfd|jfd|jfd|jfd|jfd|j
fd|j fd|jfd    |jfd
|jff
}|t|ttf«s|g}|D]ù}    t|d }|jj|}|||vržd }|j"r|r+|d dk(r#|d |j"|j$d¬«}nN|r+|d dk(r#|d |j"|j$d¬«}n!    |d |j"|j$«}|rt-||d dd |«|€ŒÐt|t«sŒá|d |vsŒé|j/|«Œûy #t $rYy wxYw#t&$r.}    |j(j+d|d ›d|    ›«Yd }    ~    Œ‡d }    ~    wwxYw)aSParse and process the PE file's data directories.
 
        If the optional argument 'directories' is given, only
        the directories at the specified indexes will be parsed.
        Such functionality allows parsing of areas of interest
        without the burden of having to parse all others.
        The directories can then be specified as:
 
        For export / import only:
 
          directories = [ 0, 1 ]
 
        or (more verbosely):
 
          directories = [ DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT'],
            DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_EXPORT'] ]
 
        If 'directories' is a list, the ones that are processed will be removed,
        leaving only the ones that are not present in the image.
 
        If `forwarded_exports_only` is True, the IMAGE_DIRECTORY_ENTRY_EXPORT
        attribute will only contain exports that are forwarded to another DLL.
 
        If `import_dllnames_only` is True, symbols will not be parsed from
        the import table and the entries in the IMAGE_DIRECTORY_ENTRY_IMPORT
        attribute will not have a `symbols` attribute.
        r=r<r>rFrDrLrNrTrPr@Nrr7T)Úforwarded_only)Ú dllnames_onlyzFailed to process directoty "z": rG)Úparse_import_directoryÚparse_export_directoryÚparse_resources_directoryÚparse_debug_directoryÚparse_relocations_directoryÚparse_directory_tlsÚparse_directory_load_configÚparse_delay_import_directoryÚparse_directory_bound_importsÚparse_exceptions_directoryrSrêrªr†r=rÚ
IndexErrorr2r±r’r;r”rÚremove)
rrÚ directoriesÚforwarded_exports_onlyÚimport_dllnames_onlyÚdirectory_parsingr>Údirectory_indexrr`rs
          rr¾zPE.parse_data_directoriesDs+€ð@,¨T×-HÑ-HÐ IØ +¨T×-HÑ-HÐ IØ -¨t×/MÑ/MÐ NØ *¨D×,FÑ,FÐ GØ .°×0PÑ0PÐ QØ (¨$×*BÑ*BÐ CØ 0°$×2RÑ2RÐ SØ 1°4×3TÑ3TÐ UØ 1°4×3UÑ3UÐ VØ .°×0OÑ0OÐ Pð 
Ðð Ð "ܘk¬E´4¨=Ô9Ø*˜m à&ò0    4ˆEð Ü"1°%¸±(Ñ";Ø ×0Ñ0×?Ñ?ÀÑP    ðÐ" o¸Ñ&DàØ×+Ò+á.Ø! !™HÐ(FÒFà (  a¡Ø%×4Ñ4Ø%ŸN™NØ+/ô!™ñ -Ø! !™HÐ(FÒFà (  a¡Ø%×4Ñ4°i·n±nÐTXô!™ð
Ø$, E¨!¡H¨Y×-EÑ-EÀyÇ~Á~Ó$V˜Eñ
Ü  e¨A¡h¨q¨r l°EÔ:ðÑ(ܘ{¬DÕ1ؘ1‘X Ò,à×"Ñ" ?Õ3ña0    4øô ò Úð ûô< -òØ ŸO™O×2Ñ2Ø"?ÀÀaÁ¸zÈÈTÈFРS÷ñûðús*Â&%FÄ: F/Æ    F,Æ+F,Æ/    G&Æ8$G!Ç!G&có^—|jjtdk7r!|jjtdk7ryt|j«}|j «}i}g}i}t ||z«D]¯}|j|j|j||«|j|«¬«}|€nmd}    |jdzdk(r#|j|vr||j}    n4t|j|j«¬«}    |    ||j<|    j|j|j|    j «««}
|
dk7r|jj|
«n«|    j|j|j|    j «««}
|
dk7r|jj|
«nP|jj|    «t!||    ¬«} |j| «| ||j"<||z }Œ²|D]ª}|j$€Œt'|j$d«sŒ'|j$j(|vr9|jjd    |j*j-«d
›d «Œx    |j$j/||j$j(«Œ¬|S#t0$rD} |jjd |j*j-«d
›d | ›«Yd} ~ Œ÷d} ~ wwxYw)zØParses exception directory
 
        All the code related to handling exception directories is documented in
        https://auscitte.github.io/systems%20blog/Exception-Directory-pefile#implementation-details
        rãrÔNr r7r)rEÚ
unwindinforz FunctionEntry of UNWIND_INFO at rjz' points to an entry that does not existz/Failed parsing FunctionEntry of UNWIND_INFO at z: )ryÚMachineÚ MACHINE_TYPErèÚ__RUNTIME_FUNCTION_format__rr¤rVr›rTÚ
UnwindDatar    r,r;r”r<rÚ BeginAddressrórMrrErûr?r’) rrrœrYÚrfÚrf_sizeÚrva2rtÚrt_funcsÚ    rva2infosr˜ÚuiÚwsr>rs              rrêzPE.parse_exceptions_directory¦s×€ð × Ñ × $Ñ $¬ Ð5OÑ(PÒ PØ× Ñ ×(Ñ(¬LÐ9RÑ,SÒSàä t×7Ñ7Ó 8ˆØ—)‘)“+ˆØˆØˆØˆ    Üt˜w‘Ó'ó(    ˆAØ×%Ñ%Ø×0Ñ0Ø— ‘ ˜c 7Ó+Ø ×4Ñ4°SÓ9ð&óˆBð ˆzÚàˆBà— ‘  Ñ#¨Ó)ð —M‘M YÑ.à" 2§=¡=Ñ1‘Bä#°×0HÑ0HÈÏÉÓ0WÔXBØ/1I˜bŸm™mÑ,à×(Ñ(¨¯©°r·}±}ÀbÇiÁiÃkÓ)RÓSØ˜’:Ø—O‘O×*Ñ*¨2Ô.ÙØ×(Ñ(¨¯©°r·}±}ÀbÇiÁiÃkÓ)RÓSØ˜’:Ø—O‘O×*Ñ*¨2Ô.Ùà×#Ñ#×*Ñ*¨2Ô.ä*°"ÀÔDˆEØ O‰O˜EÔ "à&+ˆF2—?‘?Ñ #Ø 7‰NŠCðQ(    ðVò    ˆB؏}‰}Ð$ð
ܘ2Ÿ=™=¨/Ô:ØØ—=‘=×.Ñ.°&Ñ8Ø—‘×&Ñ&Ø6°r·y±y×7PÑ7PÓ7RÐSTÐ6UØ=ð>ôðð     Ø— ‘ ×8Ñ8ؘ2Ÿ=™=×6Ñ6Ñ7õð!    ð4ˆøô!ò Ø—‘×&Ñ&ØEØ—y‘y×0Ñ0Ó2°1Ð5°R¸°vð?ôôûð  úsÊ)2KË    L,Ë(:L'Ì'L,c    ó¶—t|j«}|j«}|}g}    |j|j|j|||z|¬«}|€|j
j d«y|j«r    |S||j«z }|j|«}|j|«}|€zt|j«|z
}    |jD
cgc]}
|
j|kDr |
j‘Œ} }
| rWt| «} |j| «}|9|j|z
}    n)|jt|j««z|z
}    |s+|j
j dj|««yg} t!t|j"t%|    dz «««D]é}|j|j&|j|||z|¬«}|s t)d«‚||j«z }||j*z}|j-d|j||t.z«}|rFt1|«Dcgc] }t3|«t4j6vsŒ|‘Œ"}}t|«dkDs|rn| j t9||¬    ««Œë||j*z}|j-d|j||t.z«}|rGt1|«Dcgc] }t3|«t4j6vsŒ|‘Œ"}}t|«dkDs|r    |S|s    |S|j t;||| ¬
««Œ!cc}
wcc}wcc}w) rŠr Nz7The Bound Imports directory exists but can't be parsed.zHRVA of IMAGE_BOUND_IMPORT_DESCRIPTOR points to an invalid address: {0:x}rKz(IMAGE_BOUND_FORWARDER_REF cannot be readrre)rErí)rErírÃ)rèÚ(__IMAGE_BOUND_IMPORT_DESCRIPTOR_format__rrVrEr;r”rÚget_section_by_offsetrTrDr:r1rpr›r•r¤ÚNumberOfModuleForwarderRefsr#Ú$__IMAGE_BOUND_FORWARDER_REF_format__r’ÚOffsetModuleNameÚget_string_from_dataÚMAX_STRING_LENGTHrgr#rƒrrr)rrrœrYÚ    bnd_descrÚbnd_descr_sizerFÚ bound_importsrÛrîÚsafety_boundaryrÍÚsections_after_offsetÚfirst_section_after_offsetÚforwarder_refsr˜Ú bnd_frwd_refrÞÚname_strrÄÚ invalid_charss                    rréz PE.parse_directory_bound_importss¤€ô˜d×KÑKÓLˆ    Ø"×)Ñ)Ó+ˆØˆàˆ ØØ×,Ñ,Ø×=Ñ=Ø— ‘ ˜c C¨.Ñ$8Ð9Øð-óˆIð
Рð
—‘×&Ñ&ØMôðà×#Ñ#Ô%ØðvÐðs 9×#Ñ#Ó%Ñ %ˆCà×0Ñ0°Ó5ˆGØ×2Ñ2°3Ó7ˆK؈Ü"% d§m¡mÓ"4°{Ñ"Bð"Ÿ]™]ö)àØ×)Ñ)¨KÒ7ð×&Ó&ð)Ð%ð)ñ
)ô25Ð5JÓ1KÐ.Ø"×8Ñ8Ð9SÓTGØÐ*Ø*1×*BÑ*BÀ[Ñ*P™ð×,Ñ,¬s°7×3CÑ3CÓ3EÓ/FÑFÈÑTð ñØ—‘×&Ñ&ð7ç‘f˜S“kô    ð àˆNäܐI×9Ñ9¼3¸ÐQRÑ?RÓ;SÓTóò" ð
 $×3Ñ3Ø×=Ñ=Ø—M‘M #¨¨nÑ(<Ð=Ø #ð 4ó  ñ $Ü'Ð(RÓSÐSؐ|×*Ñ*Ó,Ñ,à ×!>Ñ!>Ñ>Ø×4Ñ4ؐt—}‘} V¨fÔ7HÑ.HÐIóñä#,¨XÓ#6ö%ؼ#¸a»&Ì×HXÑHXÒ:Xšð%Mð%ô˜8“} sÒ*©mÙà×%Ñ%Ü&¨lÀÔJõðA" ðH˜Y×7Ñ7Ñ7ˆFØ×0Ñ0ؐ4—=‘= ¨&Ô3DÑ*DÐEóˆHñä(¨Ó2ö!Ø´c¸!³fÄF×DTÑDTÒ6T’Að! ð!ôx“= 3Ò&©-ØðÐñØðÐð ×  Ñ  Ü#Ø$¨8¸^ôô ñOùò4)ùòj%ùò !sÃ'"M É MÉ4MË. MÌMc    ój—|j}|jtk(r |j}    |j    ||j |t |«j««|j|«¬«}|syt|¬«S#t$r#|jjd|z«d}YŒ:wxYw)rŠr z5Invalid TLS information. Can't read data at RVA: 0x%xN)rE) Ú__IMAGE_TLS_DIRECTORY_format__rÍrÐÚ __IMAGE_TLS_DIRECTORY64_format__rVr›rèrrTr’r;r”rÿ)rrrœrYr•Ú
tls_structs     rræzPE.parse_directory_tlsws³€ð ×4Ñ4ˆà <‰<Ô8Ò 8Ø×:Ñ:ˆFð
    Ø×-Ñ-ØØ— ‘ ˜c¤9¨VÓ#4×#;Ñ#;Ó#=Ó>Ø ×4Ñ4°SÓ9ð.óˆJñØä˜jÔ)Ð)øôò    Ø O‰O× "Ñ "ØJÈSÑPô ðŠJð        ús­A
BÂ)B2Â1B2c    óö—|jtk(r|j|«}|j}nM|jtk(r|j|«}|j
}n|j jd«yd}d}|dD],}|dz }|t|jd«dz }||k(sŒ,n|d|dd|f}d}    |j||j|t|«j««|j|«¬«}|syd}    |dkDr&|j!|j"|j$«}    t'||    ¬    «S#t$r!|j jd|z«YŒfwxYw)
rŠzGDon't know how to parse LOAD_CONFIG information for non-PE32/PE32+ fileNrr7rÖr z=Invalid LOAD_CONFIG information. Can't read data at RVA: 0x%xrA)rEÚdynamic_relocations)rÍrÎÚget_dword_at_rvaÚ&__IMAGE_LOAD_CONFIG_DIRECTORY_format__rÐÚ(__IMAGE_LOAD_CONFIG_DIRECTORY64_format__r;r”rÐr×rVr›rèrrTr’Úparse_dynamic_relocationsÚDynamicValueRelocTableOffsetÚDynamicValueRelocTableSectionr)
rrrœrYÚload_config_dir_szr•Úfields_counterÚ cumulative_szÚfieldÚload_config_structrs
          rrçzPE.parse_directory_load_config“s¨€ð <‰<Ô3Ò 3Ø!%×!6Ñ!6°sÓ!;Ð Ø×@Ñ@‰FØ \‰\Ô:Ò :Ø!%×!6Ñ!6°sÓ!;Ð Ø×BÑB‰Fà O‰O× "Ñ "ðô ððˆØˆ ؘA‘Yò    ˆEØ ˜aÑ ˆNØ Ô0°·±¸SÓ1AÀ!Ñ1DÑEÑ EˆMØР2Ó2Ùð        ð
˜‘)˜V A™Y ¨Ð7Ð8ˆà!Ðð        Ø!%×!5Ñ!5ØØ— ‘ ˜c¤9¨VÓ#4×#;Ñ#;Ó#=Ó>Ø ×4Ñ4°SÓ9ð"6ó"Ð ñ"Øà"ÐØ ˜BÒ Ø"&×"@Ñ"@Ø"×?Ñ?Ø"×@Ñ@ó#Ð ô
Ø%Ð;Nô
ð    
øôò    Ø O‰O× "Ñ "ØRÐUXÑXö ð    úsÃA
EÅ'E8Å7E8cóö—|sy|sy|t|j«kDry|j|dz
}|j|z}d}t|j«j «}    |j |j|j||«|j|«¬«}|jdk7r'|jjd|j«y||z }||jz}g}||kr%|j}    |jt k(r |j"}    t|    «j «}
    |j |    |j||
«|j|«¬«} | s    |S||
z }| j$} | j&} d| cxkrdkr@nn=|j)|| |j*| «}|jt-| | |¬««| dkDr/|j)|| «}|jt-| | |¬««|| z }||krŒ%|S#t$r"|jjd|z«YŒ£wxYw#t$r$|jjd|z«d} YŒ    wxYw)    Nr7r zPInvalid IMAGE_DYNAMIC_RELOCATION_TABLE information. Can't read data at RVA: 0x%xzDNo pasring available for IMAGE_DYNAMIC_RELOCATION_TABLE.Version = %dú<Invalid relocation information. Can't read data at RVA: 0x%xrArE)rEÚsymbolÚ relocations)rDr:r2rèÚ)__IMAGE_DYNAMIC_RELOCATION_TABLE_format__rrVr›rTr’r;r”rr±Ú#__IMAGE_DYNAMIC_RELOCATION_format__rÍrÐÚ%__IMAGE_DYNAMIC_RELOCATION64_format__ÚSymbolÚ BaseRelocSizeÚ parse_image_base_relocation_listrFró)rrÚ dynamic_value_reloc_table_offsetÚ!dynamic_value_reloc_table_sectionrÛrœÚ image_dynamic_reloc_table_structÚreloc_table_sizerHrr•Úrlc_sizeÚ dynamic_rlcr%rYr&s               rrzPE.parse_dynamic_relocationsÈsµ€ñ0ØÙ0Øà ,¬s°4·=±=Ó/AÒ AØà—-‘-РAÀAÑ EÑFˆØ×$Ñ$Ð'GÑGˆØ+/Ð(Ü$Ø × :Ñ :ó
ç
‰&‹(ð    ð
    Ø/3×/CÑ/CØ×>Ñ>Ø— ‘ ˜cÐ#3Ó4Ø ×4Ñ4°SÓ9ð0Dó0Ð ,ð ,× 3Ñ 3°qÒ 8Ø O‰O× "Ñ "ØVØ0×8Ñ8ô ðà ÐшØÐ4×9Ñ9Ñ9ˆØ ÐàC‹iØ×=Ñ=ˆFà|‰|Ô<Ò<Ø×CÑCä  Ó(×/Ñ/Ó1ˆHð #Ø"×2Ñ2ØØ—M‘M # xÓ0Ø $× 8Ñ 8¸Ó =ð3ó ñØð4#Ð"ð1 8‰OˆCØ ×'Ñ'ˆFØ×,Ñ,ˆDàFÔ˜aÕØ"×CÑCؘ˜t×GÑGÈÑOó ð$×*Ñ*Ü)Ø*°6À{ôô𠘊zØ"×CÑCÀCÈÓN Ø#×*Ñ*Ü)Ø*°6À{ôôð 4‰KˆCð]CŒið`#Ð"øôCò    Ø O‰O× "Ñ "ð$Ø&)ñ*÷ ð    ûô>!ò #Ø—‘×&Ñ&ð(Ø*-ñ.ôð#“ ð  #ús$Á'=HÄ;3I È'IÉIÉ )I8É7I8có&—|j||«S)rŠ)r,)rrrœrYs   rråzPE.parse_relocations_directory"s€ð×4Ñ4°S¸$Ó?Ð?rcó—t|j«j«}||z}g}||kr~    |j|j|j    ||«|j |«¬«}|s    |S|j|jjkDr+|jjd|jz«    |S|j|jjkDr+|jjd|jz«    |S|€.|j||z|j|j|z
«}n.|j||z|j|j|z
|«}|jt||¬««|js    |S||jz }||krŒ~|S#t $r$|jjd|z«d}YŒnwxYw)Nr r$zEInvalid relocation information. VirtualAddress outside of Image: 0x%xz9Invalid relocation information. SizeOfBlock too large: %d©rErÃ)rèÚ __IMAGE_BASE_RELOCATION_format__rrVr›rTr’r;r”r2r=Ú SizeOfImageÚ SizeOfBlockÚparse_relocationsÚparse_relocations_with_formatrõ)    rrrœrYr}r1rHr&ÚrlcÚ reloc_entriess             rr,z#PE.parse_image_base_relocation_list'sý€Ü˜T×BÑBÓC×JÑJÓLˆØD‰jˆàˆ ؐC‹ið Ø×*Ñ*Ø×9Ñ9Ø—M‘M # xÓ0Ø $× 8Ñ 8¸Ó =ð+óñØðDÐð?×!Ñ! D×$8Ñ$8×$DÑ$DÒDØ—‘×&Ñ&ð&Ø(+×(:Ñ(:ñ;ôðð4Ðð-‰ ×!5Ñ!5×!AÑ!AÒAØ—‘×&Ñ&ðØ Ÿ_™_ñ-ôðð"Ððˆ{Ø $× 6Ñ 6ؘ(‘N C×$6Ñ$6¸¿¹È(Ñ8Ró!‘ ð!%× BÑ Bؘ(‘N C×$6Ñ$6¸¿¹È(Ñ8RÐTWó! ð × Ñ Ô1¸ÀmÔTÔ Uà—?’?ØðÐð 3—?‘?Ñ "ˆCðiCŒiðlÐøôU!ò Ø—‘×&Ñ&ð(Ø*-ñ.ôð“ð  ús²=F1Æ1)GÇGc
ó|—    |j||«}|j|«}g}t «}t tt|«dz ««D]¸}|j|j||dz|dzdz|¬«}    |    s|S|    j}
|
dz    } |
dz} | | f|vr$|jj    d| |zz«|S|j| | f«|j    t|    | || |z¬    ««||    j«z }Œº|S#t$r$|jj    d|d›«gcYSwxYw)
rŠúBad RVA in relocation data: 0xrjr?r7r rSrúú3Overlapping offsets in relocation data at RVA: 0x%x)rErùrürœ)r›rTr’r;r”rÉr¤r#rDrVÚ&__IMAGE_BASE_RELOCATION_ENTRY_format__rûrur÷r) rrÚdata_rvarœrYr.rîrÃÚoffsets_and_typerr>rýÚ
reloc_typeÚ reloc_offsets              rr9zPE.parse_relocationsds|€ð    Ø—=‘= ¨4Ó0ˆDØ×2Ñ2°8Ó<ˆKð
ˆÜ›5ÐÜœœS ›Y¨™]Ó+Ó,ò    *ˆCà×(Ñ(Ø×;Ñ;ؐS˜1‘W  a¡¨1™}Ð-Ø'ð)óˆEñ Øð*ˆð)—:‘:ˆDà ™ˆJØ &™=ˆLؘjÐ)Ð-=Ñ=Ø—‘×&Ñ&ð#Ø&2°SÑ&8ñ:ôððˆð ×  Ñ   ,°
Ð!;Ô <à N‰NÜØ  z¸CÀ\ÐTWÑEWôô ð
˜5Ÿ<™<›>Ñ )‰Kð9    *ð<ˆøôIò    Ø O‰O× "Ñ "Ð%CÀHÈQÀ<Ð#PÔ QØŠIð    ús‚#DÄ*D;Ä:D;c    ó`—    |j||«}|j|«}t |«j «}g}t«}    ttt|«|z ««D]‘}
|j|||
|z|
dz|z|¬«} | s|S| j} | |    vr$|jj    d| |zz«|S|    j| «|j    t| || |z¬««||z }Œ“|S#t$r$|jj    d|d›«gcYSwxYw)rŠr>rjr7r r?)rErürœ)r›rTr’r;r”r‘rrÉr¤r#rDrYÚPageRelativeOffsetrur÷) rrrArœrYr•r.rîÚ
entry_sizerÃrÌrr>rDs              rr:z PE.parse_relocations_with_formatsb€ð    Ø—=‘= ¨4Ó0ˆDØ×2Ñ2°8Ó<ˆKô
,¨FÓ3×:Ñ:Ó<ˆ
؈ܓ%ˆÜœœS ›Y¨Ñ3Ó4Ó5ò    &ˆCà×7Ñ7ØØS˜:Ñ%¨¨q©°JÑ(>Ð?Ø'ð8óˆEñ Øð ˆð!×3Ñ3ˆLؘwÑ&Ø—‘×&Ñ&ð#Ø&2°SÑ&8ñ:ôððˆð K‰K˜ Ô %à N‰NÜ e°c¸|ÈcÑ?QÔRô ð ˜:Ñ %‰Kð/    &ð2ˆøôAò    Ø O‰O× "Ñ "Ð%CÀHÈQÀ<Ð#PÔ QØŠIð    ús‚#DÄ*D-Ä,D-c óì—t|j«j«}g}tt    ||z ««D]}    |j |||zz|«}|j|j||j|||zz«¬«}|syd}|jdk(rnƒ|jdk(rº|j}    |j}
|j|    |    |
z} | dddk(r dgd    ¢g} |
t| «j«z
} | d
kDr#| djd j| ««|j| | |    «}|àt!j"d d |j$z«d
|_t)t+j,|j.|j0|j2|j4|j6|j&f¬««j9dd«j;«|j<d›z|_n | dddk(rdgd¢g}|
t|«j«z
} | d
kDr#|djd j| ««|j|| |    «}n¹|jdk(rª|j}    |j}
|j|    |    |
z} dgd¢g}|j|| |    «}|re|j@dvrW|
t|«j«z
}|d
kDr#|djdj|««|j|| |    «}|jtC||¬««Œ|S#t $r"|jjd|z«YywxYw)rŠz7Invalid debug information. Can't read data at RVA: 0x%xNr r7r?rCsRSDSÚ CV_INFO_PDB70)z4s,CvSignaturezI,Signature_Data1zH,Signature_Data2zH,Signature_Data3zB,Signature_Data4zB,Signature_Data5z6s,Signature_Data6úI,Agerz{0}s,PdbFileNamez>Qó)Úfieldsú-ÚXsNB10Ú CV_INFO_PDB20)zI,CvHeaderSignaturezI,CvHeaderOffsetrôrJÚIMAGE_DEBUG_MISC)z
I,DataTypezI,Lengthz    B,Unicodez B,Reserved1r"©rr7z    {0}s,Data)rEr>)"rèÚ __IMAGE_DEBUG_DIRECTORY_format__rr¤r#r›r’r;r”rVrTÚTyper1Ú
SizeOfDatarEr•rErFÚSignature_Data6ÚSignature_Data6_valuerTÚuuidÚUUIDÚSignature_Data1ÚSignature_Data2ÚSignature_Data3ÚSignature_Data4ÚSignature_Data5ÚreplaceÚupperÚAgeÚSignature_StringÚUnicoderñ)rrrœrYÚdbg_sizeÚdebugrr.ÚdbgÚdbg_typeÚdbg_type_offsetÚ dbg_type_sizeÚ dbg_type_dataÚ__CV_INFO_PDB70_format__ÚpdbFileName_sizeÚ__CV_INFO_PDB20_format__Ú___IMAGE_DEBUG_MISC_format__Údbg_type_partialÚ    data_sizes                  rräzPE.parse_debug_directory¸sÖ€ô˜T×BÑBÓC×JÑJÓLˆàˆÜœ˜T H™_Ó-Ó.óa    @ˆCð Ø—}‘} S¨8°c©>Ñ%9¸8ÓDð×&Ñ&Ø×5Ñ5ØØ ×4Ñ4°S¸8Àc¹>Ñ5IÓJð'óˆCñ Ùð
ˆHàx‰x˜1Š}áà—‘˜Q“à"%×"6Ñ"6Ø #§¡ Ø $§ ¡ Ø# o¸ Ñ&Eð! ð!  !Ð$¨Ó/ð(ò    ð 0Ð,ð&¬    Ð2JÓ(K×(RÑ(RÓ(TÑTð%ð(¨!Ò+Ø0°Ñ3×:Ñ:Ø.×5Ñ5Ð6FÓGôð $×3Ñ3Ø0°-Àó Hð Ñ+Ü9?¿¹Ø  '¨H×,DÑ,DÑ"Dó:àñ:˜Ô6ô Ü $§    ¡    à(0×(@Ñ(@Ø(0×(@Ñ(@Ø(0×(@Ñ(@Ø(0×(@Ñ(@Ø(0×(@Ñ(@Ø(0×(FÑ(Fð ,&ô    !"ó ÷%™W S¨"Ó-ß"™U›WØ!)§¡¨aР0ñ2ð!Ö1ð$# 2 AÐ&¨'Ó1ð(òð0Ð,ð&¬    Ð2JÓ(K×(RÑ(RÓ(TÑTð%ð (¨!Ò+à0°Ñ3×:Ñ:Ø.×5Ñ5Ð6FÓGôð $×3Ñ3Ø0°-Àó ‘H𗑘Q’à"%×"6Ñ"6Ø #§¡ Ø $§ ¡ Ø# o¸ Ñ&Eð! ð'òð    0Ð,ð$(×#7Ñ#7Ø0°-Àó$Рñ$à'×/Ñ/°6Ñ9à)Ü'Ð(DÓE×LÑLÓNñOð"ð% qš=Ø8¸Ñ;×BÑBØ +× 2Ñ 2°9Ó =ôð$(×#7Ñ#7Ø8¸-Èó$˜ð L‰Lœ¨#°XÔ>Ö ?ðCa    @ðFˆ øôA!ò Ø—‘×&Ñ&ØPÐSVÑVôòð     úsÁMÍ'M3Í2M3c
óR —|€|g}|€|}|tkDr%|jjd|tfz«y    |j|t    |j
«j ««}|j|j
||j|«¬«}|€|jjd|z«yg}||j «z }|j|jz}    d}
|    |
kDr!|jjd|    |
fz«y|xj|    z c_ |jtkDr/|jjd|jtfz«yg} d} t|    «D].} |jsT|j |j"kDr;d    |_|jjd
|j |j"fz«|j%|«}|€#|jjd | |fz«n˜d}d}|j&d zd z    }|s |j&}n¨||j(z}    t+||«}|xj |j-«z c_| rA| d|kr9| d|k\r1| j/«|jjd|z«nñ|||j-«zf} | j|«|j0r›||j2z|vrnª|j5||j2z|||z
z
||dz|||j2zgz¬«}|snhd}|t6dk(ri}|j8D]}t;|d«sŒi}|j<j8D]É}|8t;|d«r,|j>j@jB |jD€Œ>|j>j@jF}|j>j@jB}|jD}    |j||«}tI|tK|«dz
dz|«|jM|«ŒË||j<_'Œ|jtQ||||¬««nˆ|jS||j2z«}|rf|xj |jBz c_tU||j&dz|j&dz    ¬«}|jtQ||||¬««nn›|dk(r€|jVt6dk(rj|r|d }    j<j8dj<j8}|D]/} d}!    | j>j@}!|!€Œ|jY|!«Œ1    ||j «z }Œ1| D"cgc]}"|"j[«‘Œ}#}"|#j]«t_| «D]\} }"|"ja«Œtc||¬!«}$|$S#t$r!|jjd|z«YywxYw#t$r"|jjd|z«YŒwxYw#t$r&|jjd|d›d|›«YŒ
wxYw#YŒxYw#YŒxYwcc}"w)"aØParse the resources directory.
 
        Given the RVA of the resources directory, it will process all
        its entries.
 
        The root will have the corresponding member of its structure,
        IMAGE_RESOURCE_DIRECTORY plus 'entries', a list of all the
        entries in the directory.
 
        Those entries will have, correspondingly, all the structure's
        members (IMAGE_RESOURCE_DIRECTORY_ENTRY) and an additional one,
        "directory", pointing to the IMAGE_RESOURCE_DIRECTORY structure
        representing upper layers of the tree. This one will also have
        an 'entries' attribute, pointing to the 3rd, and last, level.
        Another directory with more entries. Those last entries will
        have a new attribute (both 'leaf' or 'data_entry' can be used to
        access it). This structure finally points to the resource data.
        All the members of this structure, IMAGE_RESOURCE_DATA_ENTRY,
        are available as its attributes.
        NzNError parsing the resources directory. Excessively nested table depth %d (>%s)zCInvalid resources directory. Can't read directory data at RVA: 0x%xr zDInvalid resources directory. Can't parse directory data at RVA: 0x%xr(zNError parsing the resources directory. The directory contains %d entries (>%s)zRError parsing the resources directory. The file contains at least %d entries (>%d)TzGResource size 0x%x exceeds file size 0x%x, overlapping resources found.zHError parsing the resources directory, Entry %d is invalid, RVA = 0x%x. r5r¨rr7z^Error parsing the resources directory, attempting to read entry name. Entry names overlap 0x%xznError parsing the resources directory, attempting to read entry name. Can't read unicode string at offset 0x%x)rüÚlevelÚdirsrÚ    directoryr.z2Error parsing resource of type RT_STRING at RVA 0xrjz  with size r4)rEríÚidrsiÿrO)rEÚlangÚsublang)rErírtr.r"r¢r5)2ÚMAX_RESOURCE_DEPTHr;r”r›rèÚ#__IMAGE_RESOURCE_DIRECTORY_format__rr’rVrTÚNumberOfNamedEntriesÚNumberOfIdEntriesr@ÚMAX_RESOURCE_ENTRIESr¤rjrAriÚparse_resource_entryrÖÚ
NameOffsetrr‘r0ÚDataIsDirectoryÚOffsetToDirectoryrãÚ RESOURCE_TYPErÃrMrsr.rEr±rtÚ OffsetToDatarPr#ÚupdateÚstringsríÚparse_resource_data_entryrïÚIdÚparse_version_informationr…rØrr–rê)%rrrœrYrürqrrr.Ú resource_dirÚ dir_entriesÚnumber_of_entriesÚMAX_ALLOWED_ENTRIESÚstrings_to_postprocessÚlast_name_begin_endrÚresÚ
entry_nameÚentry_idÚname_is_stringÚ ustr_offsetÚentry_directoryrƒÚ resource_idÚresource_stringsÚ resource_langÚstring_entry_rvaÚstring_entry_sizeÚstring_entry_idÚstring_entry_datarEÚ
entry_dataÚ
last_entryÚversion_entriesÚ version_entryÚrt_version_structrÍÚ string_rvasÚresource_directory_datas%                                     rrãzPE.parse_resources_directorycsq€ð. ˆ<ؐ5ˆDà Р؈Hà Ô%Ò %Ø O‰O× "Ñ "ð:Ø=BÔDVÐ<WñXô ðð     ð—=‘=Ø”Y˜t×GÑGÓH×OÑOÓQóˆDð×+Ñ+Ø × 4Ñ 4Ø Ø×0Ñ0°Ó5ð,ó
ˆ ð
Ð ð O‰O× "Ñ "ð.Ø03ñ4ô ðàˆ ð
     ˆ|×"Ñ"Ó$Ñ$ˆð × -Ñ -° ×0NÑ0NÑ Nð    ð
#ÐØ Ð2Ò 2Ø O‰O× "Ñ "ð:à$Ð&9Ð:ñ;ô ð
à ×+Ò+Ð/@Ñ@Õ+Ø × .Ñ .Ô1EÒ EØ O‰O× "Ñ "ð>à×6Ñ6Ô8LÐMñNô ð
à!#Ðð
#ÐÜÐ*Ó+óB     ˆCà×6Ò6Ø×/Ñ/°$×2XÑ2XÒXð6:Ô2Ø—‘×&Ñ&ð'ð×3Ñ3Ø×>Ñ>ðñôð×+Ñ+¨CÓ0ˆC؈{Ø—‘×&Ñ&ð8Ø;>À¸*ñEôòàˆJ؈Hà!Ÿh™h¨Ñ3¸Ñ:ˆNÙ!ØŸ8™8‘à&¨¯©Ñ7 ð Ü!BÀ4ÈÓ!UJØ×/Ò/°:×3RÑ3RÓ3TÑTÕ/ñ+Ø+¨AÑ.°Ò<Ø/°Ñ2°kÒAð/×2Ñ2Ô4ØŸ™×.Ñ.ð7à:EñGôò
ð$Ø# j×&EÑ&EÓ&GÑGð+Ð'ð
+×1Ñ1°*Ô=ð×"Ó"ð˜c×3Ñ3Ñ3°tÑ;Úà"&×"@Ñ"@ؘs×4Ñ4Ñ4ؘC (™NÑ+Ø%Ø !™)Ø ¨C×,AÑ,AÑ!AРBÑBð #Aó#ñ'ÚðØœ}¨[Ñ9Ó9Ø GØ'6×'>Ñ'>ó)M˜ Ü" ;° Õ<à/1Ð,à1<×1FÑ1F×1NÑ1Nò"A  ð%2Ð$9Ü+2°=À&Ô+IØ'4×'9Ñ'9×'@Ñ'@×'EÑ'EÐ'MØ'2§~¡~Ð'=à$,ð%2×$6Ñ$6×$=Ñ$=×$JÑ$Jð!1ð5B×4FÑ4F×4MÑ4M×4RÑ4RР1Ø2=·.±. ð
!-Ø8<¿ ¹ Ø(8Ð:Kó9&Ð$5ô!.Ø$5Ü%(¨Ó%9¸AÑ%=ÀÑ$CØ$4ô!"ð
!(§¡Ð/?Õ @ðE"AðH=M˜K×1Ñ1Ö9ðS)MðV×"Ñ"Ü(Ø"Ø'Ø#Ø"1ô    õð×7Ñ7ؘs×4Ñ4Ñ4óñØ×/Ò/°6·;±;Ñ>Õ/Ü!6Ø%¨C¯H©H°uÑ,<ÀcÇhÁhÐRTÁnô"Jð ×&Ñ&Ü,Ø#&¨Z¸HÈ:ôõñð˜Šz˜cŸf™f¬ °lÑ(CÒCÙØ!,¨R¡JðNØ&0×&:Ñ&:×&BÑ&BÀ1Ñ&E×&OÑ&O×&WÑ&WOð *9ò
N˜ Ø,0Ð)ð!Ø0=×0BÑ0B×0IÑ0IÐ-ð -Ñ8Ø ×:Ñ:Ð;LÕMñ
Nð 3—:‘:“<Ñ ŠCðEB     ðH-CÖC qq—y‘y•{ÐCˆ ÐCØ×ÑÔäР6Ó7ò    !‰FˆCØ × Ñ Õ  ð    !ô#2بô#
Ðð'Ð&øôWò    Ø O‰O× "Ñ "ð.Ø03ñ4ô ñð     ûôp%òØ—O‘O×*Ñ*ðCàFQñS÷ðûô@(5ò!-Ø$(§O¡O×$:Ñ$:ð+1Ø1AÀ!Ð0DðE0Ø0AÐ/Bð)Dô%&ò
%-ð !-ûð~!ò!ûðòüò DsZ¹3XÉA/X4Ê7&X4ÐY"Ô0-ZÕ%ZÖ,Z$Ø'X1Ø0X1Ø4'YÙYÙ"+Z    ÚZ    ÚZÚZ!có"—    |j|t|j«j««}|j|j||j|«¬«}|S#t$r!|j
j d|z«YywxYw)z0Parse a data entry from the resources directory.zGError parsing a resource directory data entry, the RVA is invalid: 0x%xNr )    r›rèÚ$__IMAGE_RESOURCE_DATA_ENTRY_format__rr’r;r”rVrT)rrrœr.Ú
data_entrys    rr„zPE.parse_resource_data_entryšsž€ð     ð—=‘=Ø”Y˜t×HÑHÓI×PÑPÓRóˆDð×)Ñ)Ø × 5Ñ 5Ø Ø×0Ñ0°Ó5ð*ó
ˆ
ð Ðøôò    Ø O‰O× "Ñ "ð+Ø.1ñ3ô ñð     ús‚3A$Á$'B Bcóº—    |j|t|j«j««}|j |j||j |«¬«}|€y|jdz|_|jdz|_    |jdz|_
|jdzdz    |_ |jdz|_ |S#t$rYywxYw)z5Parse a directory entry from the resources directory.Nr r`ìþrÊr5r¨)r›rèÚ)__IMAGE_RESOURCE_DIRECTORY_ENTRY_format__rr’rVrTrÖr}Ú_PE__padr…rr~r)rrrœr.Úresources    rr|zPE.parse_resource_entry²sá€ð    Ø—=‘=Ø”Y˜t×MÑMÓN×UÑUÓWóˆDð×'Ñ'Ø × :Ñ :Ø Ø×0Ñ0°Ó5ð(ó
ˆð Ð Øð'Ÿm™m¨jÑ8ˆÔà!Ÿ™¨Ñ3ˆŒØ—m‘m jÑ0ˆŒ à$,×$9Ñ$9¸JÑ$FÈ2Ñ#MˆÔ Ø%-×%:Ñ%:¸ZÑ%GˆÔ"àˆøô-ò    áð    ús‚3Cà   CÃCcóú—    |j|j«}|j |||jz}|j|j||¬«}|€y|j|j«z}|j|«}d}|r-|jt|j|j«z}d}    |€|j!|d¬«}n|j!|||z
dz    d¬«}|€+|jj    dj |««y|©|d    k7r¤t#|«d
kDrL|dd
j%d«}    |    d|    j'd «}    t)d j |    t#|«««}|jj    dj |j%d«j+d d«««yt-|d«sg|_|}
||
_|j.j    |
«|€d}|j3|j«dt#|«dzzz|j«} |j|j4|| d|| z¬«} | syt-|d«sg|_|j6j    | «|j3| | j«z|j«} t-|d«sg|_g}    |j|j:|| d|| z¬«}|€|jj    d«y|j| z|j«z}    |j!|«}||_|j    |«|r'|j=d«r|j>dvr |j@dk(rý|j3| |j«zdt#|«dzzz|j«}g|_!    |j|jD||d||z¬«}|snŽ|j|z|j«z}    |j!|«}||_#i|_$i|_%i|_&|jBj    |«|j3||j«zdt#|«dzzz|j«}|||jNzkr‡|j|jP||d||z¬«}|sn_|j|z|j«z}    |j!|«}|j|«}|j3dt#|«dzz|z|j«z|j«}|j|z}    |j!||j@¬«}|j|«}|jNdk(r||jNz}n)|j3|jN|z|j«}||jH|<||f|jJ|<t#|«t#|«f|jL|<|||jNzkrŒ‡|j3|jN|z|j«}||k(rn|}||jNk\rn    Œ¯|r|j=d«rò|}d|_)|j>dvrÚ|j@dk(rÊ|j3| |j«zdt#|«dzzz|j«}g|_*    |j|jV||d||z¬«}|sn[|j|z|j«z}    |j!|«}|€n%|jTj    |«|j3dt#|«dzz|z|j«z|j«}|} || |j@zkry|jY|||dzd«}!|jY||dz|d!zd«}"|d!z }t[|!t\«rt[|"t\«r|d"|!|"fzi|_/|| |j@zkrŒy|j3||jNz|j«}|||jNzkrnŒƒ|j3|jN| z|j«} |jNdk(s| |jNk\rnŒ|j8j    |«y#t$r7|jj    dj |j««YywxYw#t$r"|jj    d|z«YŒwwxYw#t$r-|jj    dj |««YŒÂwxYw#t$r.|jj    dj |««YŒFwxYw#t$r.|jj    dj |««YŒÌwxYw#t$r#|jj    d|d›«YŒûwxYw#t$r.|jj    d j |««YŒéwxYw)#a’Parse version information structure.
 
        The date will be made available in three attributes of the PE object.
 
        VS_VERSIONINFO   will contain the first three fields of the main structure:
            'Length', 'ValueLength', and 'Type'
 
        VS_FIXEDFILEINFO will hold the rest of the fields, accessible as sub-attributes:
            'Signature', 'StrucVersion', 'FileVersionMS', 'FileVersionLS',
            'ProductVersionMS', 'ProductVersionLS', 'FileFlagsMask', 'FileFlags',
            'FileOS', 'FileType', 'FileSubtype', 'FileDateMS', 'FileDateLS'
 
        FileInfo    is a list of all StringFileInfo and VarFileInfo structures.
 
        StringFileInfo structures will have a list as an attribute named 'StringTable'
        containing all the StringTable structures. Each of those structures contains a
        dictionary 'entries' with all the key / value version information string pairs.
 
        VarFileInfo structures will have a list as an attribute named 'Var' containing
        all Var structures. Each Var structure will have a dictionary as an attribute
        named 'entry' which will contain the name and value of the Var.
        zWError parsing the version information, attempting to read OffsetToData with RVA: 0x{:x}Nr Úascii©Úencodingr7zzError parsing the version information, attempting to read VS_VERSION_INFO string. Can't read unicode string at offset 0x%xz"Invalid VS_VERSION_INFO block: {0}sVS_VERSION_INFOrcz\uz({0} ... ({1} bytes, too long to display)úz\00rrŠr?rrÂz/Error parsing StringFileInfo/VarFileInfo structz|Error parsing the version information, attempting to read StringFileInfo string. Can't read unicode string at offset 0x{0:x}sStringFileInforQrzyError parsing the version information, attempting to read StringTable string. Can't read unicode string at offset 0x{0:x}z}Error parsing the version information, attempting to read StringTable Key string. Can't read unicode string at offset 0x{0:x}rŽzzError parsing the version information, attempting to read StringTable Value string. Can't read unicode string at offset 0xrjs VarFileInfoÚ VarFileInfoz}Error parsing the version information, attempting to read VarFileInfo Var string. Can't read unicode string at offset 0x{0:x}rCz 0x%04x 0x%04x)0rTrr’r;r”r•rEr±rVÚ__VS_VERSIONINFO_format__rr‹r2rqr3r4rrDrHÚrfindrGr^rMrÚKeyÚ dword_alignÚ__VS_FIXEDFILEINFO_format__rrÂÚ__StringFileInfo_format__rVrSÚ ValueLengthrÚ__StringTable_format__ÚLangIDrÃrÄrÅÚLengthÚ__String_format__rírÚ__Var_format__Úget_word_from_datarSr#r>)#rrÚversion_structÚ start_offsetr¤Úversioninfo_structr‘rÛÚ section_endÚversioninfo_stringÚexcerptÚvinfoÚfixedfileinfo_offsetÚfixedfileinfo_structÚstringfileinfo_offsetrÊÚstringfileinfo_structÚstringfileinfo_stringÚstringtable_offsetÚstringtable_structÚstringtable_stringÚ entry_offsetÚ string_structrÚ
key_offsetÚ value_offsetr`Únew_stringtable_offsetÚvarfileinfo_structÚ
var_offsetÚ
var_structÚ
var_stringÚvarword_offsetÚorig_varword_offsetÚword1Úword2s#                                   rr†zPE.parse_version_informationÑs, €ð4        Ø×3Ñ3°N×4OÑ4OÓPˆLð—=‘= ° ¸~×?RÑ?RÑ0RÐSˆð"×1Ñ1Ø × *Ñ *¨HÀ,ð2ó
Ðð Ð %Ø à$×1Ñ1Ð4F×4MÑ4MÓ4OÑOˆ Ø×)Ñ)¨+Ó6ˆØˆ Ù Ø!×0Ñ0´3Ø×%Ñ% w×'?Ñ'?ó4ñˆKð"Ðð
    ØÐ"Ø%)×%=Ñ%=ب'ð&>ó&Ñ"ð&*×%=Ñ%=Ø +° Ñ";ÀÑ!AÈGð&>ó&Ð"ð Ð %Ø O‰O× "Ñ "Ø4×;Ñ;Ð<NÓOô ð ð Ð )Ð.@ÐDVÒ.VÜÐ%Ó&¨Ò,Ø,¨T¨cÐ2×9Ñ9¸'ÓBà!Ð"8 G§M¡M°%Ó$8Ð9Ü%&Ø>×EÑEؤÐ%7Ó!8óó&Ð"ð
O‰O× "Ñ "Ø4×;Ñ;Ø&×-Ñ-¨gÓ6×>Ñ>¸uÀfÓMóô ð
ätÐ-Ô.Ø"$ˆDÔ ð#ˆð'ˆŒ    à ×Ñ×"Ñ" 5Ô)à Ð %Ø!#Ð à#×/Ñ/Ø × %Ñ %Ó '¨!¬sÐ3EÓ/FÈÑ/JÑ*KÑ KØ × 'Ñ 'ó 
Ðð $×3Ñ3Ø × ,Ñ ,Ø Ð)Ð*Ð +Ø$Ð';Ñ;ð 4ó 
Ðñ $Ø ätÐ/Ô0Ø$&ˆDÔ !ð     ×Ñ×$Ñ$Ð%9Ô:ð
!%× 0Ñ 0Ø  Ð#7×#>Ñ#>Ó#@Ñ @Ø × 'Ñ 'ó!
Ðô t˜ZÔ(؈DŒMàˆØð%)×$8Ñ$8Ø×.Ñ.ØÐ.Ð/Ð0Ø(Ð+@Ñ@ð%9ó%Ð !ð %Ð,Ø—‘×&Ñ&ØEôðð×+Ñ+Ø'ñ(à$×+Ñ+Ó-ñ.ð ð
 Ø(,×(@Ñ(@ÀÓ(MÐ%ð)>Ð !Ô %ð L‰LÐ.Ô /ò%Ð)>×)IÑ)IØ!õ*ð
*×.Ñ.°&Ò8Ø-×9Ñ9¸QÓ>ð*.×)9Ñ)9Ø-Ø/×6Ñ6Ó8ñ9àœsÐ#8Ó9¸AÑ=Ñ>ñ?ð'×3Ñ3ó    *Ð&ð9;Ð)Ô5ðà-1×-AÑ-AØ ×7Ñ7Ø$Ð%7Ð%8Ð9Ø(4Ð7IÑ(Ið.Bó.Ð*ñ  2Ù!ð+×7Ñ7Ø0ñ1à0×7Ñ7Ó9ñ:ð$ð
 
"Ø15×1IÑ1IÈ+Ó1VÐ.ð5GÐ*Ô1Ø57Ð*Ô2Ø=?Ð*Ô:Ø=?Ð*Ô:Ø-×9Ñ9×@Ñ@ÐASÔTà'+×'7Ñ'7Ø.Ø0×7Ñ7Ó9ñ:à¤3Ð'9Ó#:¸QÑ#>Ñ?ñ@ð+×7Ñ7ó    (˜ ð)Ø0Ð3E×3LÑ3LÑLóMð-1×,@Ñ,@Ø $× 6Ñ 6Ø (¨¨Р7Ø,8¸<Ñ,Gð-Aó-˜Mñ $1Ù %ð!/× ;Ñ ;Ø".ñ!/à"/×"6Ñ"6Ó"8ñ!9ð(ð
&Ø&*×&>Ñ&>¸{Ó&K Ø-1×-EÑ-EÀkÓ-R 
ð,0×+;Ñ+;Ø !¤S¨£X°¡\Ñ 2Ø".ñ!/à"/×"6Ñ"6Ó"8ñ!9ð!/× ;Ñ ;ó    ,˜Lð+9×*EÑ*EÈ Ñ*T˜Kð &Ø(,×(@Ñ(@Ø$/¸M×<UÑ<Uð)Aó)" ð04×/GÑ/GÈ Ó/T  ð -×3Ñ3°qÒ8à$6Ð9K×9RÑ9RÑ$Rñ!-ð04×/?Ñ/?Ø$1×$8Ñ$8¸<Ñ$GØ$2×$?Ñ$?ó0"  ð
?DÐ.×6Ñ6°sÑ;à *Ø ,ðGÐ.×>Ñ>¸sÑCô
!$ C£Ü # E£
ðGÐ.×>Ñ>¸sÑCðG)Ø0Ð3E×3LÑ3LÑLôMðP26×1AÑ1AØ.×5Ñ5Ð8JÑJØ*×7Ñ7ó2Ð.ð2Ð5GÒGÙ!Ø-CÐ*à-Ð1F×1MÑ1MÒMÙ!ñAòF'Ð+@×+KÑ+KØõ,ð&;Ð"Ø*7Ð"Ô'ð'×+Ñ+¨vÒ5Ø*×6Ñ6¸!Ó;ð"&×!1Ñ!1Ø-Ø,×3Ñ3Ó5ñ6àœsÐ#8Ó9¸AÑ=Ñ>ñ?ð'×3Ñ3ó    "Jð.0Ð&Ô*ðØ%)×%9Ñ%9Ø ×/Ñ/Ø$ Z [Ð1Ø(4°zÑ(Að&:ó&˜
ñ  *Ù!ð+×7Ñ7Ø(ñ)à(×/Ñ/Ó1ñ2ð$ð
 
"Ø)-×)AÑ)AÀ+Ó)N˜Jð&Ð-Ù!à*×.Ñ.×5Ñ5°jÔAà)-×)9Ñ)9ؤ Z£°1Ñ!4Ñ5Ø(ñ)à(×/Ñ/Ó1ñ2ð+×7Ñ7ó    *˜ð /=Ð+ð+Ø1°J×4JÑ4JÑJòKð%)×$;Ñ$;Ø (¨¸.È1Ñ:LРMÈqó%˜Eð%)×$;Ñ$;Ø (¨¸!Ñ);¸nÈqÑ>PРQÐSTó%˜Eð+¨aÑ/˜Nä)¨%´Ô5¼*ÀUÌCÔ:Pà$.°À5È%À.Ñ0Pð4" 
Ô 0ð+Ø1°J×4JÑ4JÑJóKð &*×%5Ñ%5Ø&¨×):Ñ):Ñ:¸N×<WÑ<Wó&˜
ð&¨°j×6GÑ6GÑ)GÒGØ!ñ}ðB%)×$4Ñ$4Ø%×,Ñ,Ð/DÑDØ×+Ñ+ó%Ð !ð&×,Ñ,°Ò1Ø(Ð,>×,EÑ,EÒEàñ}ð@          ‰ ×јUÕ#øôo ò    Ø O‰O× "Ñ "ðCßCIÁ6Ø"×/Ñ/óDô ñ ð    ûôRò    Ø O‰O× "Ñ "ð5à8CñE÷ ð    ûôJ!ò Ø—‘×&Ñ&ð<ç<B¹FÀ;Ó<Oôñ
ð  ûôh -ò"Ø ŸO™O×2Ñ2ð!HçHNÉØ$/óI"ôò"ð"ûô^$1ò&Ø $§¡× 6Ñ 6ð%LçLRÉFØ(3óM&ô!"ò!&ð&ûô.$1ò&Ø $§¡× 6Ñ 6ð%BàBMÈaÀð%Rô!"ò
!&ð &ûôf -ò"Ø ŸO™O×2Ñ2ð!NçNTÉfØ$/óO"ôò"ð"ús}‚c6Â<0d9Ì6e'Ð#f Ô"gÕ7.hÝiã6=d6ä5d6ä9'e$å#e$å'3fæfæ 3gçgç3hèhè(iè?ié3i:é9i:có ‡—    ‰j‰j‰j|t‰j«j    ««‰j |«¬«}|syˆfd„}    ‰j|jt||j«|jdz««}‰j|jt||j«|jdz««}‰j|jt||j«|jdz««}g}    d}
‰j|j«} t!‰j"«} | r3| j$t!| j««z|jz
} t'j(t*«} d}t-t|jt+| dz «««D]Ô}‰j/||«}|$|dzt!|«kr‰j1||«}ny||dk(rŒF||k\r,|||zkr$‰j3|«}    ‰j |«}n|rŒzd}d}‰j1||«}|€|
d    z}
|
dkrd
}n7‰j3|t4«}t7|d¬ «sd
}n    ‰j |«}| ||fxxd    z cc<| ||fdkDr%‰jjd |›d |d›d«n¿t!| «‰j8kDr6‰jjdj;‰j8««nq|    jt=‰|j>|z‰j |jd|zz«|‰j |jd|zz«||||¬«    «Œ×|s)‰jjd|jd›«|    Dchc]}|j@’Œ}}d}
‰j|j«} t!‰j"«} | r3| j$t!| j««z|jz
} t'j(t*«} d}t-t|jt+| dz «««D]%}||j>z|vsŒ    ‰j1||«}|€|
d    z}
|
dkrd
}nð|dk(rŒ?|||k\r|||zkr‰j3|«}nd}| |xxd    z cc<| |‰jBkDr7‰jjdj;‰jB|««nqt!| «‰j8kDr+‰jjd‰j8›d«n.|    jt=|j>|z|d|¬««Œ(|s*‰jjd|jd›«y|    s|jE«rytG||    ‰j3|jH«¬«S#t $r!‰jjd|z«YywxYw#t $r!‰jjd|z«YywxYw#t $rYŒ¾wxYw#t $rI|
d    z}
|
dkrd
}YŒ    ‰j |«}n"#t $r|
d    z}
|
dkrd
}YYŒ0YYŒ wxYwYŒ8wxYwcc}w#t $rd}YŒ8wxYw)aParse the export directory.
 
        Given the RVA of the export directory, it will process all
        its entries.
 
        The exports will be made available as a list of ExportData
        instances in the 'IMAGE_DIRECTORY_ENTRY_EXPORT' PE attribute.
        r z+Error parsing export directory at RVA: 0x%xNcóR•—t‰j«‰j|«z
Sr)rDrErT)rœrrs €rÚlength_until_eofz3PE.parse_export_directory.<locals>.length_until_eof¤s"ø€Üt—}‘}Ó%¨×(@Ñ(@ÀÓ(EÑEÐ ErrCrOTrr7F)rËz9Export directory contains more than 10 repeated entries (r/z#02xz). Assuming corrupt.zHExport directory contains more than {} symbol entries. Assuming corrupt.r?)    rrÈrÚrËrærírØrärçzIRVA AddressOfNames in the export directory points to an invalid address: rjz[Export directory contains more than {} repeated ordinal entries (0x{:x}). Assuming corrupt.z$Export directory contains more than z# ordinal entries. Assuming corrupt.)rÈrËríräzMRVA AddressOfFunctions in the export directory points to an invalid address: )rEÚsymbolsrí)%rVÚ!__IMAGE_EXPORT_DIRECTORY_format__r›rèrrTr’r;r”ÚAddressOfNamesrpÚ NumberOfNamesÚAddressOfNameOrdinalsÚAddressOfFunctionsÚNumberOfFunctionsr‹rDrEr2Ú collectionsÚ defaultdictr#r¤r»Úget_dword_from_dataÚget_string_at_rvaÚMAX_SYMBOL_NAME_LENGTHrÐr7r•râÚBaserÈr8rràrÖ)rrrœrYrßÚ
export_dirrÚÚaddress_of_namesÚaddress_of_name_ordinalsÚaddress_of_functionsÚexportsÚ#max_failed_entries_before_giving_uprÛr Ú symbol_countsÚ&export_parsing_loop_completed_normallyrLÚsymbol_ordinalÚsymbol_addressÚ forwarder_strrçÚsymbol_name_addressÚ symbol_nameÚsymbol_name_offsetÚexpÚordinalsrs`                         rrâzPE.parse_export_directory†s²ø€ð     Ø×-Ñ-Ø×6Ñ6Ø— ‘ Øœ 4×#IÑ#IÓJ×QÑQÓSóð!×4Ñ4°SÓ9ð .óˆJñØ ô
    Fð    Ø#Ÿ}™}Ø×)Ñ)ÜÙ$ Z×%>Ñ%>Ó?Ø×,Ñ,¨qÑ0óó Ð ð(,§}¡}Ø×0Ñ0ÜÙ$ Z×%EÑ%EÓFØ×,Ñ,¨qÑ0óó(Ð $ð$(§=¡=Ø×-Ñ-ÜÙ$ Z×%BÑ%BÓCØ×0Ñ0°1Ñ4óó$Ð  ðˆà.0Ð+à×)Ñ)¨*×*CÑ*CÓDˆä˜dŸm™mÓ,ˆÙ à×&Ñ&ܐg×&Ñ&Ó(Ó)ñ*à×+Ñ+ñ,ð ô $×/Ñ/´Ó4ˆ Ø15Ð.Ü”s˜:×3Ñ3´S¸È1Ñ9LÓ5MÓNÓOó]    ˆAØ!×4Ñ4Ð5MÈqÓQˆNàÐ)¨n¸qÑ.@Ä3Ø$óDò/ð"&×!9Ñ!9Ø(¨.ó"‘ñ ØÐ%¨¸1Ò)<Øð
 Ò$¨¸#À¹*Ò)DØ $× 6Ñ 6°~Ó F ðØ'+×'?Ñ'?ÀÓ'OÑ$ñ"ØØ $ Ø#'Рà"&×":Ñ":Ð;KÈQÓ"OÐ Ø"Ð*Ø3°qÑ8Ð3Ø6¸!Ò;Ø=BÐ:Úà×0Ñ0Ø#Ô%;óˆKô*¨+ÐPTÕUØ9>Ð6Úð Ø%)×%=Ñ%=Ð>QÓ%RÐ"ð$ ˜;¨Ð7Ó 8¸AÑ =Ó 8ؘk¨>Ð:Ñ;¸bÒ@Ø—‘×&Ñ&ðØ#} B ~°dÐ&;Ð;OðQôñܐ]Ó# d×&=Ñ&=Ò=Ø—‘×&Ñ&ð(ß(.©¨t×/FÑ/FÓ(Gôñà N‰NÜØØ&ŸO™O¨nÑ<Ø#'×#;Ñ#;Ø"×8Ñ8¸1¸q¹5Ñ@ó$ð+Ø#'×#;Ñ#;Ø"×5Ñ5¸¸NÑ8JÑJó$ð%Ø 2Ø+Ø%5ôö ð[]    ñ~6Ø O‰O× "Ñ "ðØ&×5Ñ5°aÐ8ð:ô ð
,3Ö3 CC—K“KÐ3ˆÐ3à.0Ð+à×)Ñ)¨*×*GÑ*GÓHˆä˜dŸm™mÓ,ˆÙ à×&Ñ&ܐg×&Ñ&Ó(Ó)ñ*à×/Ñ/ñ0ð ô $×/Ñ/´Ó4ˆ Ø15Ð.Üœ˜Z×9Ñ9¼3¸ÐQRÑ?RÓ;SÓTÓUó6    ˆCà˜Ÿ™Ñ(¨HÒ4ð*Ø%)×%=Ñ%=Ð>RÐTWÓ%XNð"Ð)Ø7¸1Ñ<Ð7Ø:¸aÒ?ØAFÐ>Ùà! QÒ&Øð#Ð.Ø&¨#Ò-Ø&¨¨t©Ò3à$(×$:Ñ$:¸>Ó$J‘Mà$(Mð
˜nÓ-°Ñ2Ó-Ø  Ñ0°4×3KÑ3KÒKà—O‘O×*Ñ*ðFßFLÁfØ ×4Ñ4°nóGôñ ܘÓ'¨$×*AÑ*AÒAØ—O‘O×*Ñ*Ø>Ø×2Ñ2Ð3Ð3VðXôñà—‘ÜØ *§¡°#Ñ 5Ø .Ø!Ø"/ô    öð_6    ñp6Ø O‰O× "Ñ "ðØ&×9Ñ9¸!Ð<ð>ô ð á˜:×0Ñ0Ô2ØÜØØØ×'Ñ'¨
¯©Ó8ô
ð    
øôcò    Ø O‰O× "Ñ "Ø=ÀÑEô ñ ð        ûôJò    Ø O‰O× "Ñ "Ø=ÀÑEô ñ ð        ûôZ%òÚðûô.!ò Ø3°qÑ8Ð3Ø6¸!Ò;Ø=BÐ:ÛðØ)-×)AÑ)AÐBUÓ)VÑ&øÜ$òØ7¸1Ñ<Ð7Ø:¸aÒ?ØAFÐ>ÜÛð úò'ð üòn4øô*%ò*Ø%)“Nð*ús‹ƒAX:Á*C    Y'ÉZÊ,Z$Ï)[9Ó[>Ø:'Y$Ù#Y$Ù''ZÚZÚ    Z!Ú Z!Ú$[6Ú>[Û[6Û[/Û%[6Û*[6Û.[/Û/[6Û5[6Û> \ Ü \ có$—||zdzdz|dzz
S)NrAlüÿrc)rrrÞÚbases   rr²zPE.dword_aligns €Ø˜$‘ Ñ" jÑ0°T¸JÑ5FÑGÐGrcóª—|jj}|jj|jjz}||kr
||kr||z}|Sr)r=Ú    ImageBaser7)rrÚvaÚbegin_of_imageÚ end_of_images    rÚnormalize_import_vazPE.normalize_import_va’sW€ð×-Ñ-×7Ñ7ˆØ×+Ñ+×5Ñ5¸×8LÑ8L×8XÑ8XÑXˆ ð ˜RÒ  B¨Ò$5Ø .Ñ  ˆB؈    rcóP—g}d}        |j|t|j«j««}|j|«}|j|j||¬«}|r|j«r    |Sd}|jdk(râ|jjtdk(rÂ|j|j«|_|j|j «|_|j|j"«|_|j|j$«|_|j|j$«|_|j|j(«|_d}||j«z }t+|j,«|z
}    ||j"kDs||j kDr&t/||j"z
||j z
«}    g}
    |j1|j"|j d|    |«}
|d    kDr-|j
j d
j3|««    |S|
s|d z }ŒB|j6t8kDr1|j
j d |j6t8fz«    |S|j;|j(t<«} t?| «s tAd «} | ri|
D]G} | jBŒtEjF| jI«| jJ«}|sŒA|| _!ŒI|j tM||
| ¬««Œ(#t$r"|j
j d|z«Y|SwxYw#t$r@} |j
j dj3|| j4««Yd} ~ Œ”d} ~ wwxYw)z*Walk and parse the delay import directory.rTz5Error parsing the Delay import directory at RVA: 0x%xr FrÃNzSError parsing the Delay import directory. Invalid import data at RVA: 0x{0:x} ({1})rEzWToo many errors parsing the Delay import directory. Invalid import data at RVA: 0x{0:x}r7z)Error, too many imported symbols %d (>%s)ú    *invalid*©rEÚimportsÚdll)'r›rèÚ(__IMAGE_DELAY_IMPORT_DESCRIPTOR_format__rr’r;r”rTrVrÚgrAttrsryrôrõrÿÚ    pBoundIATÚpIATÚpINTÚ
pUnloadIATÚphmodÚszNamerDrErqÚ parse_importsr•r`rBÚMAX_IMPORT_SYMBOLSråÚMAX_DLL_LENGTHrÊrGríÚ    ordlookupÚ    ordLookupÚlowerrÈrÂ)rrrœrYÚ import_descsrMr.rîÚ import_descÚcontains_addressesÚmax_lenÚ import_datarrr%Úfuncnames               rrèzPE.parse_delay_import_directoryžs—€ðˆ ؈ Øð ð—}‘}ØÜ˜d×KÑKÓL×SÑSÓUóð×2Ñ2°3Ó7ˆKØ×.Ñ.Ø×=Ñ=ØØ'ð/óˆKñ +×"8Ñ"8Ô":Øð^Ðð]"'Ð ð×#Ñ# qÒ(Ø×$Ñ$×,Ñ,´ Ð=VÑ0WÒWà(,×(@Ñ(@À×AVÑAVÓ(W Ô%Ø#'×#;Ñ#;¸K×<LÑ<LÓ#M Ô Ø#'×#;Ñ#;¸K×<LÑ<LÓ#M Ô Ø)-×)AÑ)AØ×*Ñ*ó* Ô&ð%)×$<Ñ$<¸[×=SÑ=SÓ$T Ô!Ø%)×%=Ñ%=¸k×>PÑ>PÓ%Q Ô"Ø%)Ð"à ;×%Ñ%Ó'Ñ 'ˆCô
˜$Ÿ-™-Ó(¨;Ñ6ˆGؐ[×%Ñ%Ò%¨¨{×/?Ñ/?Ò)?ܘc K×$4Ñ$4Ñ4°c¸K×<LÑ<LÑ6LÓMàˆKð Ø"×0Ñ0Ø×$Ñ$Ø×$Ñ$ØØØ&ó  ð˜QŠØ—‘×&Ñ&ð:ß:@¹&À»+ôðð6Ðñ3ؘqÑ  Ùà×*Ñ*Ô-?Ò?Ø—‘×&Ñ&Ø?Ø×2Ñ2Ô4FÐGñHôðð Ðð×(Ñ(¨×);Ñ);¼^ÓLˆCÜ(¨Ô-ܘ “náØ)ò3FØ—{‘{Ñ*Ü#,×#6Ñ#6°s·y±y³{ÀFÇNÁNÓ#S˜Ú#Ø*2˜FKð    3ð
×#Ñ#Ü"¨+¸{ÐPSÔTôñEøô!ò Ø—‘×&Ñ&ØKÈsÑSôððtÐð} ûôp!ò Ø—‘×&Ñ&ð@ß@FÁÀsÈDÏJÉJÓ@W÷òûð ús)‡3L.Ç#)MÌ.'MÍMÍ    N%Í%5N ΠN%cóÚ—t|d«r |j€y|dk(r-t|jj«j    «S|dk(r-t |jj«j    «S|dk(r-t |jj«j    «S|dk(r-t|jj«j    «Std«‚)Nr¿rŠr    rrrz#Invalid hashing algorithm specified)    rMr¿r    r§rarrrrh)rrÚ    algorithms  rÚget_rich_header_hashzPE.get_rich_header_hash sƀܐt˜]Ô+¨t×/?Ñ/?Ð/GØà ˜Ò ܐt×'Ñ'×2Ñ2Ó3×=Ñ=Ó?Ð ?Ø ˜&Ò  Ü˜×(Ñ(×3Ñ3Ó4×>Ñ>Ó@Ð @Ø ˜(Ò "ܘ$×*Ñ*×5Ñ5Ó6×@Ñ@ÓBÐ BØ ˜(Ò "ܘ$×*Ñ*×5Ñ5Ó6×@Ñ@ÓBÐ BäÐ=Ó>Ð>rc    ó”—g}gd¢}t|d«sy|jD]p}t|jt«r)|jj «j «}n|jj «}|jdd«}t|«dkDr |d|vr|d}|jj «}|jD]»}d}|jsJtj||jd¬    «}|s2td
|j›d |jd ›«‚|j}|sŒjt|t«r|j «}|j|j «›d|j «›«Œ½Œst!d j#|«j%««j'«S)a?Return the imphash of the PE file.
 
        Creates a hash based on imported symbol names and their specific order within
        the executable:
        https://www.mandiant.com/resources/blog/tracking-malware-import-hashing
 
        Returns:
            the hexdigest of the MD5 hash of the exported symbols.
        )ÚocxÚsysrÚDIRECTORY_ENTRY_IMPORTrŠú.r7rNT)Ú    make_namezUnable to look up ordinal rÚ04xrÖ)rMrrSrrUrHrÚrsplitrDrrírrrÈr’r”r    rÁrira)    rrÚimpstrsÚextsr>ÚlibnameÚpartsÚentry_dll_lowerÚimprs             rÚ get_imphashzPE.get_imphashs‚€ðˆÚ$ˆÜtÐ5Ô6ØØ×0Ñ0ó    NˆEܘ%Ÿ)™)¤UÔ+ØŸ)™)×*Ñ*Ó,×2Ñ2Ó4‘àŸ)™)Ÿ/™/Ó+Ø—N‘N 3¨Ó*ˆEä5‹z˜AŠ~ %¨¡(¨dÑ"2Ø ™(à#Ÿi™iŸo™oÓ/ˆOØ—}‘}ò NØØ—x’xÜ(×2Ñ2Ø'¨¯©Àô Hñ$Ü+Ø8¸¿¹¸ À1ÀSÇ[Á[ÐQTÐDUÐVóðð #Ÿx™xHáØä˜h¬Ô.Ø'Ÿ™Ó0HØ—‘¨'¯-©-­/¸8¿>¹>Ô;KÐLÕMò% Nð    Nô>3—8‘8˜GÓ$×+Ñ+Ó-Ó.×8Ñ8Ó:Ð:rcóŒ—t|d«syt|jd«sy|jjDcgc]8}|r4|j(|jj    «j «‘Œ:}}t |«dk(rytdj|«j««j«Scc}w)zÝReturn the exphash of the PE file.
 
        Similar to imphash, but based on exported symbol names and their specific order.
 
        Returns:
            the hexdigest of the SHA256 hash of the exported symbols.
        ÚDIRECTORY_ENTRY_EXPORTrŠrÛrrÖ) rMr,rÛrírHrrDrrÁrira)rrr:Ú export_lists   rÚ get_exphashzPE.get_exphashJs¬€ôtÐ5Ô6Øät×2Ñ2°IÔ>Øð×0Ñ0×8Ñ8ö
àِQ—V‘VÐ'ð F‰FM‰M‹O× !Ñ !Õ #ð
ˆ ð
ô
ˆ{Ó ˜qÒ  Øäc—h‘h˜{Ó+×2Ñ2Ó4Ó5×?Ñ?ÓAÐAùò
s½=Ccót—g}d}t|j«j«}        |j||«}|j|«}|j|j||¬«}    |    r|    j«rnx||    j«z }t|j«|z
}
||    jkDs||    jkDr&t||    jz
||    jz
«}
g} |sb    |j|    j|    j|    j |
¬«} |d
kDr |j
j d |d›«n¬| s|d z }Œ,|j%|    j&t(«} t+| «s t-d «} | ri| D]G}|j.Œt1j2| j5«|j6«}|sŒA||_ŒI|j t9|    | | ¬««ŒÎ|sÍt;ddg«}d}d}|D]‰}|j<D]x}|D]l}|r |j.sŒ|j.}t?|j.«t@k(r|j.jCd«}|jE|«sŒg|d z }n|d z }ŒzŒ‹|t|«k(r |dkr|j
j d«|S#t$r"|j
j d|d›«YŒûwxYw#t$r8} |j
j d|d›d| j"›d«Yd    } ~ Œ d    } ~ wwxYw)z$Walk and parse the import directory.rz-Error parsing the import directory at RVA: 0xrjr rŽzBError parsing the import directory. Invalid Import data at RVA: 0xz (ú)NrEzLToo many errors parsing the import directory. Invalid import data at RVA: 0xr7rrÚ LoadLibraryÚGetProcAddressr‡r³z?Imported symbols contain entries typical of packed executables.)#rèÚ"__IMAGE_IMPORT_DESCRIPTOR_format__rr›r’r;r”rTrVrrDrEÚOriginalFirstThunkÚ
FirstThunkrqr ÚForwarderChainr`rårÖrrÊrGrírrrrÈrÂrÉrrùrUrHrV)rrrœrYràrrMÚimage_import_descriptor_sizer.rîrrrr:rr%rÚsuspicious_importsÚsuspicious_imports_countÚ total_symbolsÚimp_dllÚsuspicious_symbolrís                      rrázPE.parse_import_directorycso€ðˆ ؈ Ü'0Ø × 3Ñ 3ó(
ç
‰&‹(ð    %ðð ð—}‘} SÐ*FÓGð×2Ñ2°3Ó7ˆKØ×.Ñ.Ø×7Ñ7¸È;ð/óˆKñ
 +×"8Ñ"8Ô":Ùà ;×%Ñ%Ó'Ñ 'ˆCô
˜$Ÿ-™-Ó(¨;Ñ6ˆGؐ[×3Ñ3Ò3°s¸[×=SÑ=SÒ7SÜØ˜+×8Ñ8Ñ8¸#À ×@VÑ@VÑ:VóðˆKÙ ð Ø"&×"4Ñ"4Ø#×6Ñ6Ø#×.Ñ.Ø#×2Ñ2Ø#*ð    #5ó#Kð ’?Ø—O‘O×*Ñ*ð9Ø9<¸Q¸ðAôðá"Ø 1Ñ$Káà×(Ñ(¨×)9Ñ)9¼>ÓJˆCÜ(¨Ô-ܘ “náØ)ò3FØ—{‘{Ñ*Ü#,×#6Ñ#6°s·y±y³{ÀFÇNÁNÓ#S˜Ú#Ø*2˜FKð    3ð
×#Ñ#Ü"¨+¸{ÐPSÔTôñIñPÜ!$ mÐ5EÐ%FÓ!GÐ Ø'(Ð $؈MØ'ò 'Ø%Ÿo™oò
'FØ-?ò"Ð)Ù%¨V¯[ª[Ø$Ø%Ÿ{™{˜Ü § ¡ Ó,´Ò5Ø#)§;¡;×#5Ñ#5°gÓ#>˜DØŸ?™?Ð+<Õ=Ø4¸Ñ9Ð4Ù!ð"ð" QÑ&‘Mñ
'ð 'ð)¬CÐ0BÓ,CÒCØ! BÒ&à—‘×&Ñ&ØUôðÐøôw!ò Ø—‘×&Ñ&ØCÀCÈÀ7ÐKôñð     ûôF%òØ—O‘O×*Ñ*ð9Ø9<¸Q¸¸rÀ!Ç'Á'ÀÈ!ðM÷òûðús)ªKÃ33K6Ë(K3Ë2K3Ë6    L7Ë?-L2Ì2L7cóf—g}|j|||«}|j|||«}|rt|«dk(r5|rt|«dk(r%|jjd|d›d|d›«gSd}    |r|}    n|r|}    nyd}
d} |jt
k(rt } n$|jtk(r t} d}
d    } nt } d} t|    «D]Â\}}d}d}d}d}d}d
}|jrÓ|j| zrd }|jd z}d}d}nd
}    |j| z}|j|d «}|j|d«}|j|jd zt«}t|«s t!d«}|j#|jd z«}|j'«}|j)|«}||j*j,z||
zz}d}    |r6|r4||j||jk7r||j}||}nd}|€ |€ t%d«‚|t!d«k(r| dkDr| |k(r t%d«‚| dz } Œ‡|s|sŒ|jt1||||||j'«||||||¬««ŒÅ|S#t$$rYŒwxYw#t.$rd}YŒ—wxYw)zíParse the imported symbols.
 
        It will fill a list, which will be available as the dictionary
        attribute "imports". Its keys will be the DLL names and the values
        of all the symbols imported from that object.
        rz\Damaged Import Table information. ILT and/or IAT appear to be broken. OriginalFirstThunk: 0xrjz FirstThunk: 0xNrCr`rKlÿÿÿÿFTrÊr?rz"Invalid entries, aborting parsing.ièz)Too many invalid names, aborting parsing.r7)rrÒr×Úimport_by_ordinalrÈrÚÚhintrírØrÉrËÚhint_name_table_rvaÚ thunk_offsetÚ    thunk_rva)Úget_import_tablerDr;r”rÍrÎrÏrÐrÑrrÔr›r»råÚMAX_IMPORT_NAME_LENGTHrÐrGrTr’rûrQr=rûrërÆ)rrÚoriginal_first_thunkÚ first_thunkÚforwarder_chainrrÚimported_symbolsÚiltÚiatÚtableÚ
imp_offsetÚ address_maskrÜÚ num_invalidrÚ    tbl_entryÚimp_ordÚimp_hintÚimp_namerØr@r>r.rArBÚ imp_addressr×Ú    imp_bounds                            rr zPE.parse_importsÍsL€ðÐð×#Ñ#Ø   *Ð.@ó
ˆð×#Ñ# K°Ð=OÓPˆñ”s˜3“x 1’}©s´c¸#³hÀ!²mØ O‰O× "Ñ "ð)à)=¸aÐ(@ðA!Ø!,¨Q ð1ô ð ˆIàˆÙ ؉E٠؉Eààˆ
Ø!ˆ Ø <‰<Ô3Ò 3Ü-‰LØ \‰\Ô:Ò :Ü/ˆL؈JØ-‰Lô
.ˆLàˆ Ü'¨Ó.ó^    ‰NˆCØˆG؈H؈H؈KØ"&Ð Ø %Ð à×&Ò&ð×*Ñ*¨\Ò9Ø(,Ð%Ø'×5Ñ5¸Ñ>GØ#HØ"&‘Kà(-Ð%ðØ.7×.EÑ.EÈ Ñ.TÐ+Ø#Ÿ}™}Ð-@À!ÓD˜à#'×#:Ñ#:¸4ÀÓ#C˜Ø#'×#9Ñ#9Ø%×3Ñ3°aÑ7Ô9Oó$˜ô 6°hÔ?Ü'(¨£~˜Hà&*×&>Ñ&>Ø%×3Ñ3°aÑ7ó'˜ ð )×8Ñ8Ó: Ø ×4Ñ4°\ÓB    ð˜d×2Ñ2×<Ñ<Ñ<¸sÀZÑ?OÑOð ðˆJð !Ù™3 3 s¡8×#9Ñ#9¸SÀ¹X×=SÑ=SÒ#SØ # C¡× 6Ñ 6IØ!$ S¡‘Jà $Iðˆ 8Ð#3Ü#Ð$HÓIÐIð
œ1˜[›>Ò)Ø Ò%¨+¸Ò*<Ü'Ð(SÓTÐTؘqÑ  Ùá›(Ø ×'Ñ'ÜØØ%.Ø#-Ø*;Ø 'Ø'0×'@Ñ'@Ó'BØ%Ø%Ø$/Ø'Ø +Ø,?Ø%1Ø"+ôöð[^    ð@ ÐøôA)òÚðûô$ò !Ø ’    ð !ús%ÄB
JÇ:J"Ê    JÊJÊ" J0Ê/J0có*—g}|jtk(rt}|j}n8|jtk(rt
}|j }nt}|j}t|«j«}d}d}    d}
d} t«} t«} |}|rf|&|||zk\r|jjd«    |S|jtkDr1|jjd|jtfz«    |S|xjdz c_ | |
k\rgS| j«|kDrgS| j«|kDrgSd}    |j||«}|st#«|k7r|jjd
|z«y|j%|||j'|«¬ «}|r€|j)|j*«|_|j)|j,«|_|j)|j.«|_|j)|j0«|_|r?|j*|k\r0|j*|kr!|jjd |z«    |S|rK|j*r?|j*}||zr
|d zdkDr&gS||    k\r| }n| }||vr| dz } |j3|«|r|j5«r    |S||j«z }|j|«|rŒf|S#t $rd    }YŒ¯wxYw)Nr›ìrYrz9Error parsing the import table. Entries go beyond bounds.z$Excessive number of imports %d (>%s)r7FTz9Error parsing the import table. Invalid data at RVA: 0x%xr z\Error parsing the import table. AddressOfData overlaps with THUNK_DATA for THUNK at RVA 0x%xr`rÊ)rÍrÎrÏÚ__IMAGE_THUNK_DATA_format__rÐrÑÚ__IMAGE_THUNK_DATA64_format__rèrrlr;r”rBrrxr›r’rDrVrTrÿrÔrÖrÕrÓrur)rrrœrrrKrÜr•Ú expected_sizeÚMAX_ADDRESS_SPREADÚADDR_4GBÚMAX_REPEATED_ADDRESSESÚrepeated_addressÚaddresses_of_data_set_64Úaddresses_of_data_set_32Ú    start_rvaÚfailedr.Ú
thunk_dataÚ addr_of_dataÚthe_sets                    rrCzPE.get_import_tablels]€àˆð
<‰<Ô3Ò 3Ü-ˆLØ×5Ñ5‰FØ \‰\Ô:Ò :Ü/ˆLØ×7Ñ7‰Fô
.ˆLØ×5Ñ5ˆFä! &Ó)×0Ñ0Ó2ˆ Ø(ÐØˆØ!#ÐØÐÜ#-£<РÜ#-£<Р؈    ÚØÐ%¨#°¸ZÑ1GÒ*GØ—‘×&Ñ&ØOôððBˆ ð×*Ñ*Ô-?Ò?Ø—‘×&Ñ&Ø:Ø×2Ñ2Ô4FÐGñHôððtˆ ðq × 'Ò '¨1Ñ ,Õ 'ð Ð#9Ò9ؐ    ð
(×,Ñ,Ó.Ð1CÒCؐ    Ø'×,Ñ,Ó.Ð1CÒCؐ    àˆFð Ø—}‘} S¨-Ó8ñœ˜T› mÒ3Ø—‘×&Ñ&ØRÐUXÑXôðà×-Ñ-ؘ¨$×*BÑ*BÀ3Ó*Gð.óˆJñ
"Ø+/×+CÑ+CØ×,Ñ,ó,
Ô(ð.2×-EÑ-EØ×.Ñ.ó.
Ô*ð'+×&>Ñ&>¸z×?RÑ?RÓ&S
Ô#Ø%)×%=Ñ%=¸j×>PÑ>PÓ%Q
Ô"ñØ×,Ñ,°    Ò9Ø×,Ñ,°Ò3à—‘×&Ñ&ð(à+.ñ0ôð
ð>ˆ ñ;˜j×6Ò6Ø)×7Ñ7 à ,Ò.ð$ jÑ0°6Ò9Ø!˜    ð $ xÒ/Ø":™à":˜à# wÑ.Ø(¨AÑ-Ð(Ø—K‘K  Ô-á ×!6Ñ!6Ô!8Øð ˆ ð     :×$Ñ$Ó&Ñ &ˆCà L‰L˜Ô $óIðLˆ øôM!ò Ø“ð úsÅLÌ LÌLcóî—||j}|j|«|jdd}|jD]-}|jdk(r|jdk(rŒ#|j}|j |j |jj«}|j|j|jj|jj«}|t|j«kDs8|t|j«kDs ||zt|j«kDs||k\rŒõ|t|«z
}    |    dkDr    |d|    zz }n
|    dkr|d|    }||j«z }Œ0||_|S)a´Returns the data corresponding to the memory layout of the PE file.
 
        The data includes the PE header and the sections loaded at offsets
        corresponding to their relative virtual addresses. (the VirtualAddress
        section header member).
        Any offset in this data corresponds to the absolute memory address
        ImageBase+offset.
 
        The optional argument 'max_virtual_address' provides with means of limiting
        which sections are processed.
        Any section with their VirtualAddress beyond this value will be skipped.
        Normally, sections with values beyond this range are just there to confuse
        tools. It's a common trick to see in packed executables.
 
        If the 'ImageBase' optional argument is supplied, the file's relocations
        will be applied to the image by calling the 'relocate_image()' method. Beware
        that the relocation information is applied permanently.
        Nrr)rEÚrelocate_imager:r4r3r<r1r=r>rAr2rBrDr›)
rrÚmax_virtual_addressrûÚ original_dataÚ mapped_datarÛÚsrdÚprdr6r™s
          rÚget_memory_mapped_imagezPE.get_memory_mapped_imageðs{€ð, Ð  ð!ŸM™MˆMà × Ñ      Ô *ð—m‘m¡AÐ&ˆ Ø—}‘}ó     .ˆGð×'Ñ'¨1Ò,°×1FÑ1FÈ!Ò1KØà×'Ñ'ˆCØ×+Ñ+Ø×(Ñ(¨$×*>Ñ*>×*LÑ*LóˆCð"&×!=Ñ!=Ø×&Ñ&Ø×$Ñ$×5Ñ5Ø×$Ñ$×2Ñ2ó"Ð ð”c˜$Ÿ-™-Ó(Ò(Øœ˜TŸ]™]Ó+Ò+ؘ‘9œs 4§=¡=Ó1Ò1Ø%Ð)<Ò<àà/´#°kÓ2BÑBˆNà Ò!ؘu ~Ñ5Ñ5‘ Ø !Ò#Ø)¨/¨>Ð: à ˜7×+Ñ+Ó-Ñ -ŠKðA     .ðH Ð  Ø)ˆDŒMàÐrcó¤—g}t|d«rÁ|jjD]¨}t|d«sŒ|jjD]€}t|d«sŒt|jd«sŒ'|jjsŒ>t |jjj ««D]}|j|«ŒŒ‚Œª|S)aReturns a list of all the strings found withing the resources (if any).
 
        This method will scan all entries in the resources directory of the PE, if
        there is one, and will return a [] with the strings.
 
        An empty list will be returned otherwise.
        ÚDIRECTORY_ENTRY_RESOURCErsrƒ)rMrnrÃrsrƒrªrkr”)rrÚresources_stringsÚres_typer“Ú
res_strings     rÚget_resources_stringszPE.get_resources_strings9sȀðÐä 4Ð3Ô 4à ×9Ñ9×AÑAò IÜ˜8 [Õ1Ø'/×'9Ñ'9×'AÑ'Aò    I˜ Ü" ;° Õ<ä '¨ ×(=Ñ(=¸yÕ IØ$/×$9Ñ$9×$AÓ$Aä26Ø$/×$9Ñ$9×$AÑ$A×$HÑ$HÓ$Jó3"ò!I Jð%6×$<Ñ$<¸ZÕ$Hñ!Iñ     Ið Ið!Рrcó—|j|«}|r||z}nd}|sY|t|j«kr|j||S|t|j«kr|j||St    d«‚|j ||«S)zÌGet data regardless of the section where it lies on.
 
        Given a RVA and the size of the chunk to retrieve, this method
        will find the section where the data lies and return the data.
        Nz-data at RVA can't be fetched. Corrupt header?)r‹rDrŠrEr’r›)rrrœrŸrÍrHs     rr›z PE.get_dataUs‹€ð × #Ñ # CÓ (ˆá ؘ‘,‰CàˆCáØ”S˜Ÿ™Ó%Ò%Ø—{‘{ 3 sÐ+Ð+ð”S˜Ÿ™Ó'Ò'Ø—}‘} S¨Ð-Ð-äРOÓPÐ Pàz‰z˜#˜vÓ&Ð&rc
óL—|j|«}|s||jrnt|jDcgc]G}|j|j|j
j |j
j«‘ŒIc}«}||kr|Sy|S|j|«Scc}w)z.Get the RVA corresponding to this file offset.N)    rr:rprAr2r=rBr>rQ)rrrÞrÍÚ
lowest_rvas    rrQzPE.get_rva_from_offsetws§€ð × &Ñ & vÓ .ˆÙ؏}Š}Ü ð"&§¡ö ð ð ×4Ñ4Ø×,Ñ,Ø ×0Ñ0×AÑAØ ×0Ñ0×>Ñ>õòó    
ð˜JÒ&ð"MØà Ø×$Ñ$ VÓ,Ð,ùò-s³A B!cóž—|j|«}|s*|t|j«kr|Std|d›d«‚|j    |«S)z³Get the file offset corresponding to this RVA.
 
        Given a RVA , this method will find the section where the
        data lies and return the offset within the file.
        zdata at RVA 0xrjz can't be fetched)r‹rDrEr’rT)rrrœrÍs   rrTzPE.get_offset_from_rva–sW€ð × #Ñ # CÓ (ˆÙð ”S˜Ÿ™Ó'Ò'ؐ
ä .°°Q°Ð7HРIÓJÐ Jà×$Ñ$ SÓ)Ð)rcó¸—|€y|j|«}|s"|jd|j|||z«S|jd|j||¬««S)z1Get an ASCII string located at the given address.Nr)rŸ)r‹rrEr›)rrrœrrÍs    rråzPE.get_string_at_rva«sb€ð ˆ;Øà × #Ñ # CÓ (ˆÙØ×,Ñ,¨Q°· ± ¸cÀCÈ*ÑDTÐ0UÓVÐ VØ×(Ñ(¨¨A¯J©J°sÀ:¨JÓ,NÓOÐOrcód—|t|«kDry||d}t|t«r t|«S|S)r rN)rDrSrgrU)rrrÞr.rÌs    rÚget_bytes_from_datazPE.get_bytes_from_data¶s4€à ”C˜“IÒ ØØ ˆMˆÜ aœÔ #ܘ“8ˆO؈rcó`—|j||«}|jd«}|dk\r|d|}|S)zGet an ASCII string from data.rrN)ryr©)rrrÞr.rÍrHs     rrzPE.get_string_from_data¿s8€à × $Ñ $ V¨TÓ 2ˆØf‰fU‹mˆØ !Š8ؐ$3ˆA؈rcób—|dk(ry|j|d«}|dz}t|d«}|j||«}d}    |jd|dz«}|dk(rGt|«}||ks||k(rt|«dz    }n2||j||z||z
«z }|dz
}|}n|dzdk(r|dz}nŒpt    j
dj |«|d    |dz«}d
jtt|««}    |rt|    j|d ««St|    jd d ««S) z3Get an Unicode string located at the given address.rrr?r7rer¢rKz<{:d}HNrŠr
r‡) r›rpr©rDrErFr•rÁÚmapr#rGri)
rrrœrr¬r.Ú    requestedÚ
null_indexÚ data_lengthÚuchrsrÍs
          rrzPE.get_string_u_at_rvaÇsM€ð ˜Š?Øð}‰}˜S !Ó$ˆð    qш
ä˜
 CÓ(ˆ    Ø}‰}˜S )Ó,ˆàˆ
ØØŸ™ ;°
¸Q±Ó?ˆJؘRÒÜ! $›i Ø Ò*¨k¸ZÒ.GÜ!$ T£¨a¡JØð˜Ÿ ™  c¨KÑ&7¸ÀkÑ9QÓRÑRØ&¨™]
Ø&‘    à˜a‘ 1Ò$ؘqÑ 
Øðô$— ‘ ˜hŸo™o¨jÓ9¸4Ð@PÀ*ÈqÁ.Ð;QÓRˆØ G‰G”Cœ˜U“OÓ $ˆá ܐQ—X‘X˜hÐ(;Ó<Ó=Ð =䐗‘˜'Ð#6Ó7Ó8Ð8rcóP—|jD]}|j|«sŒ|cSy)z1Get the section containing the given file offset.N)r:rV)rrrÞrÛs   rrzPE.get_section_by_offsetòs/€ð—}‘}ò    ˆGØ×&Ñ& vÕ.Ø’ð    ðrcóė|j'|jj|«r |jS|jD]}|j|«sŒ||_|cSy)z-Get the section containing the given address.N)r9rZr:)rrrœrÛs   rr‹zPE.get_section_by_rvaûsc€ð
× -Ñ -Ð 9Ø×1Ñ1×>Ñ>¸sÔCØ×9Ñ9Ð9à—}‘}ò    ˆGØ×#Ñ# CÕ(Ø5<Ô2Ø’ð    ð
rcó"—|j«Sr)Ú    dump_inforws rrˆz
PE.__str__ s€Ø~‰~ÓÐrcó—t|d«S)z.Checks if the PE file has relocation directoryÚDIRECTORY_ENTRY_BASERELOC)rMrws rÚ
has_relocsz PE.has_relocss€ätÐ8Ó9Ð9rcóJ—t|d«r|jjryy)NÚDIRECTORY_ENTRY_LOAD_CONFIGTF)rMr‰rrws rÚhas_dynamic_relocszPE.has_dynamic_relocss"€Ü 4Ð6Ô 7Ø×/Ñ/×CÒCØàrcó:—t|j|¬««y)z=Print all the PE header information in a human readable from.r«N)r·r„)rrr¬s  rÚ
print_infoz PE.print_infos€ä ˆdn‰n hˆnÓ/Õ0rc óš-—|€
t«}|j«}|r9|jd«|D]#}|j|«|j    «Œ%|jd«|j |j j««|j    «|jd«|j |jj««|j    «|jd«|j |jj««ttd«}|jd«g}t|«D]0}t|j|d«sŒ|j|d«Œ2|jd    j!|««|j    «t#|d
«rF|j$:|jd
«|j |j$j««tt&d «}|jd «g}t|«D]0}t|j$|d«sŒ|j|d«Œ2|jd    j!|««|j    «|jd «tt(d«}    |j*D]s}
|j |
j««|jd«g}t|    «D]&}t|
|d«sŒ|j|d«Œ(|jd    j!|««|jdj-|
j/«««t0.|jdj-|
j3«««t4"|jd|
j7«z«t8"|jd|
j;«z«t<"|jd|
j?«z«|j    «Œvt#|d
«rtt#|j$d«r^|jd«|j$j@D]$} | €Œ|j | j««Œ&|j    «t#|d«rKtC|jD«D]2\} } tG|jD«dkDr|jd| dz›«n|jd«| |j | j««|j    «t#|d«r<|j |jH| j««|j    «t#|d«sŒÎtG|jJ«| kDsŒç|jJ| D]9}|j |j««|j    «t#|d«r|jLD]ô}|j«Dcgc]}|jd|z«‘Œc}|jdj-|jNjQ|d«««|j    «ttS|jTjW«««D]I}|jd j-|djQ|d«|djQ|d«««ŒKŒö|j    «ŒUt#|d!«sŒc|jXD]¸}t#|d"«sŒ|j«Dcgc]}|jd|z«‘Œc}|jd j-tS|jZj]««djQd#d«tS|jZj_««d««Œº|j    «Œ<Œ5t#|d$«rT|jd%«|j |j`jbj««|j    «|jd&d'z«|j`jdD]Ã}|jf€Œtid(«}|jjr |jj}|jd)|jl|jf|jQ|«fz«|jnr;|jd*j-|jnjQ|d«««Œ´|j    «ŒÅ|j    «t#|d+«rU|jd,«|jpD]4}|j |jbj««|jrsc|jd-j-|ju|jbjv«jQ|d«««|j    «|j    «|jrD]i}|jxd.ur°|jj_|jd/j-|jzjQd#«|jjjQd#«|jl««n¥|jd0j-|jzjQd#«|jl««n`|jd1j-|jzjQ|d«|jjjQ|d«|j|««|j~r,|jd2j-|j~««ŒZ|j    «Œl|j    «Œ7t#|d3«r|jd4«|j€D]û}|j |jbj««|jd5j-|jjjQ|d«««|j    «|jTD]w}|j |jbj«d6«|jd5j-|jjjQ|d««d6«|j    «ŒyŒýt#|d7«ry|jd8«|j‚D]X}|j |jbj««|j    «|jrD]ý}|jxd.urF|jd9j-|jzjQ|d«|jl««n`|jd:j-|jzjQ|d«|jjjQ|d«|j|««|j~r+|jd2j-|j~««Œî|j    «Œÿ|j    «Œ[t#|d;«rY|jd<«|j |j„jbj««|j„jTD]ë}|jj3|jjjQ|d«}|jd=|›d>d?«nXt†j‰|jbjŠd@«}|jdA|jbjŠdB›dC|›dDd?«|j |jbj«d?«t#|dE«r
|j |jŒjbj«d6«|jŒjTD]¼}|jj3|jjjQd#d«}|jd=|›d>dF«n+|jdA|jbjŠdB›d>dF«|j |jbj«dF«t#|dE«sŒ¥|j |jŒjbj«dG«|jŒjTD]    }t#|dH«sŒ|jdI|jŽj|jŽj’t”j‰|jŽjdJ«t—|jŽj|jŽj’«fzdG«|j |jbj«dK«|j |jŽjbj«dL«Œ t#|jŒdM«sŒ|jŒj˜sŒ,|jdNdK«tSt|jŒj˜jW«««D]F\} }|jdOj-| |j›dPdQ«jQdR««dL«ŒHŒ¿|j    «Œî|j    «t#|dS«rv|jœrj|jœjbrT|jdT«|j |jœjbj««|j    «t#|dU«rv|jžrj|jžjbrT|jdV«|j |jžjbj««|j    «t#|dW«rÒ|jdX«|j D]²}|j |jbj««    |jdYt¢|jbj¤z«|j    «|jZsŒy|j |jZj«d6«|j    «Œ´|j©«r¢|jd[«|jªD]‚}|j |jbj««|jTD]8}     |jd\| j¬t®| j°d]dfzd6«Œ:|j    «Œ„t#|d_«r§tG|j²«dkDr|jd`«|j²D]o}!|j |!jbj««t#|!da«sŒ9|!j´€ŒF|j |!j´j«d6«Œq|j·«Scc}wcc}w#t¦$r8|jdZj-|jbj¤««YŒwxYw#t¦$r/|jd^| j¬| j°fzd6«YŒ•wxYw)bz>Dump all the PE header information into human readable string.NúParsing Warningsrlrrryr^r.rr/r=r_zDllCharacteristics: ú PE SectionsrKz!Entropy: {0:f} (Min=0.0, Max=8.0)zMD5     hash: {0}zSHA-1   hash: %szSHA-256 hash: %szSHA-512 hash: %srÚ Directoriesrr7zVersion Information úVersion InformationrrÂrz  z   LangID: {0}r
z     {0}: {1}rr>r‡r,úExported symbolsz%-10s   %-10s  %s©rÓÚRVArÖÚNonez%-10d 0x%08X    %sz forwarder: {0}rúImported symbolsz   Name -> {0}Tz*{0}.{1} Ordinal[{2}] (Imported by Ordinal)z&{0} Ordinal[{1}] (Imported by Ordinal)z{0}.{1} Hint[{2:d}]z Bound: 0x{0:08X}ÚDIRECTORY_ENTRY_BOUND_IMPORTú Bound importszDLL: {0}rCÚDIRECTORY_ENTRY_DELAY_IMPORTúDelay Imported symbolsz({0} Ordinal[{1:d}] (Imported by Ordinal)z{0}.{1} Hint[{2}]rnúResource directoryzName: [ú]r?rMzId: [0xrNz] (r0rsrGrKr.z\--- LANG [%d,%d][%s,%s]r9rOrSrƒz    [STRINGS]z {0:6d}: {1}úunicode-escaper rªÚDIRECTORY_ENTRY_TLSÚTLSr‰Ú LOAD_CONFIGÚDIRECTORY_ENTRY_DEBUGúDebug informationzType: zType: 0x{0:x}(Unknown)úBase relocationsz%08Xh %sr4z0x%08X 0x%x(Unknown)ÚDIRECTORY_ENTRY_EXCEPTIONz"Unwind data for exception handlingró)\rªr“r¹r®r»r²rlrrrryrZrzruÚsortedr
r”rÁrMr=rrLr:r•r_r    rirrbrrdrrgrrrrDrrÂrr·rHrªrÃr¿rr>rRrkr,rErÛrËrGrírÈrärrrårÖr>rr?rÉr—r™rnr€r;r…rsr.rurvr:rArƒriržr‰r¡Ú
DEBUG_TYPErSr‡r‡r†rœÚRELOCATION_TYPErùr¤rórÂ)"rrrr¬Úwarningsr¸r•r_rYr›rNrÛrsrÚ vinfo_entryr>rËr±Ú    str_entryÚ    var_entryÚexportríÚmoduler%Úbound_imp_descÚ bound_imp_refrpÚ res_type_idr“r•rqreÚ
base_relocÚrelocrùs"                                  rr„z PE.dump_infos›€ð ˆ<Ü“6ˆDà×$Ñ$Ó&ˆÙ Ø O‰OÐ.Ô /Ø#ò #Ø— ‘ ˜gÔ&Ø× Ñ Õ"ð #ð     ‰˜ Ô%Ø ‰t—‘×+Ñ+Ó-Ô.Ø ×ÑÔà ‰˜ Ô%Ø ‰t—‘×+Ñ+Ó-Ô.Ø ×ÑÔà ‰˜ Ô&Ø ‰t×'Ñ'×,Ñ,Ó.Ô/ä$Ô%:¸MÓJˆ à ‰Ô؈ܘ;Ó'ò    &ˆDܐt×'Ñ'¨¨a©Õ1Ø— ‘ ˜T !™WÕ%ð    &ð      ‰ d—i‘i Ó&Ô'Ø ×ÑÔä 4Ð*Ô +°×0DÑ0DÐ0PØ O‰OÐ-Ô .Ø N‰N˜4×/Ñ/×4Ñ4Ó6Ô 7ä$2Ü Ð!<ó%
Ð!ð     ‰Ð'Ô(؈ÜÐ4Ó5ò    &ˆDܐt×+Ñ+¨T°!©WÕ5Ø— ‘ ˜T !™WÕ%ð    &ð      ‰ d—i‘i Ó&Ô'Ø ×ÑÔà ‰˜ Ô&ä&Ô'>À ÓMˆ à—}‘}ó    ˆGØ N‰N˜7Ÿ<™<›>Ô *Ø H‰HYÔ ØˆEܘ}Ó-ò *Ü˜7 D¨¡GÕ,Ø—L‘L  a¡Õ)ð *ð M‰M˜$Ÿ)™) EÓ*Ô +Ø M‰MØ3×:Ñ:¸7×;NÑ;NÓ;PÓQô ôˆØ— ‘ Ð1×8Ñ8¸×9MÑ9MÓ9OÓPÔQÜÐØ— ‘ Ð0°7×3HÑ3HÓ3JÑJÔKÜÐ!Ø— ‘ Ð0°7×3JÑ3JÓ3LÑLÔMÜÐ!Ø— ‘ Ð0°7×3JÑ3JÓ3LÑLÔMØ × Ñ Ö ð'    ô* 4Ð*Ô +´Ø ×  Ñ  Ð"2ô1
ð O‰O˜MÔ *Ø!×1Ñ1×@Ñ@ò 5    ØÑ(Ø—N‘N 9§>¡>Ó#3Õ4ð 5ð × Ñ Ô ä 4Ð)Õ *Ü$-¨d×.AÑ.AÓ$Bó< /Ñ [ܐt×*Ñ*Ó+¨aÒ/Ø—O‘OÐ&:¸3À¹7¸)Ð$DÕEà—O‘OÐ$9Ô:ØÐ*Ø—N‘N ;×#3Ñ#3Ó#5Ô6Ø× Ñ Ô"ä˜4Ð!3Ô4Ø—N‘N 4×#8Ñ#8¸Ñ#=×#BÑ#BÓ#DÔEØ×$Ñ$Ô&ä˜4 Õ,´°T·]±]Ó1CÀcÓ1IØ!%§¡¨sÑ!3ó./˜ØŸ™ u§z¡z£|Ô4Ø×(Ñ(Ô*ä" 5¨-Õ8Ø,1×,=Ñ,=ò& ØHPÏ É ËÖ XÀ §¡¨t°d©{Õ!;Ó XØ $§ ¡ Ø$3×$:Ñ$:Ø(0¯©×(>Ñ(>Ø,4Ð6Ió)*ó%&ô!"ð!%× 0Ñ 0Ô 2Ü17¼¸X×=MÑ=M×=SÑ=SÓ=UÓ8VÓ1Wò !& Ià$(§M¡MØ(6×(=Ñ(=Ø,5°a©L×,?Ñ,?Ø08Ð:Mó-.ð-6°a©L×,?Ñ,?Ø08Ð:Mó-.ó    )*õ    %&ñ !&ð&ð.!×,Ñ,Ö.ä$ U¨EÖ2Ø-2¯Y©Yò &     Ü#*¨9°gÕ#>ð5>·N±NÓ4Dö%&à,0ð)-¯ © °d¸T±kÕ(Bó%&ð%)§M¡MØ(6×(=Ñ(=Ü,0°·±×1EÑ1EÓ1GÓ,HÈÑ,K×,RÑ,RØ07Ð9Ló-.ô-1°·±×1GÑ1GÓ1IÓ,JÈ1Ñ,Mó    )*õ%&ð &ð!×,Ñ,Ö.ò]./ð< /ô| 4Ð1Õ 2Ø O‰OÐ.Ô /Ø N‰N˜4×6Ñ6×=Ñ=×BÑBÓDÔ EØ × Ñ Ô Ø M‰MÐ-Ð0JÑJÔ KØ×5Ñ5×=Ñ=ò +Ø—>‘>Ñ-ܘV›9DØ—{’{Ø%Ÿ{™{˜Ø—H‘HØ,Ø!Ÿ>™>¨6¯>©>¸4¿;¹;ÀxÓ;PÐQñRôð×'Ò'ØŸ ™ Ø-×4Ñ4Ø &× 0Ñ 0× 7Ñ 7¸ÐBUÓ Vóõð ×(Ñ(Õ*ð! +ð$ × Ñ Ô ä 4Ð1Õ 2Ø O‰OÐ.Ô /Ø×5Ñ5ó* #Ø—‘˜vŸ}™}×1Ñ1Ó3Ô4à—~’~Ø—H‘HØ'×.Ñ.Ø ×2Ñ2°6·=±=×3EÑ3EÓF×MÑMØ (Ð*=óóôð×$Ñ$Ô&Ø× Ñ Ô"Ø$Ÿn™nó+FØ×/Ñ/°4Ñ7Ø!Ÿ;™;Ð2Ø ŸH™HØ L× SÑ SØ$*§J¡J×$5Ñ$5°gÓ$>Ø$*§K¡K×$6Ñ$6°wÓ$?Ø$*§N¡Nó!"õð!ŸH™HØ H× OÑ OØ$*§J¡J×$5Ñ$5°gÓ$>ÀÇÁó!"õð Ÿ™Ø1×8Ñ8Ø &§
¡
× 1Ñ 1°(Ð<OÓ PØ &§ ¡ × 2Ñ 2°8Ð=PÓ QØ &§ ¡ óôð—|’|ØŸ ™ Ð&9×&@Ñ&@ÀÇÁÓ&NÖOà×(Ñ(Ö*ð9+ð:× Ñ Ö"ðU* #ôX 4Ð7Õ 8Ø O‰O˜OÔ ,Ø"&×"CÑ"Cò 'à—‘˜~×4Ñ4×9Ñ9Ó;Ô<Ø— ‘ Ø×%Ñ%Ø&×+Ñ+×2Ñ2°8Ð=PÓQóôð
× Ñ Ô"à%3×%;Ñ%;ò'MØ—N‘N =×#7Ñ#7×#<Ñ#<Ó#>ÀÔBØ—M‘MØ"×)Ñ)Ø)×.Ñ.×5Ñ5°hÐ@SÓTóðô    ð ×$Ñ$Õ&ñ'ð 'ô( 4Ð7Õ 8Ø O‰OÐ4Ô 5Ø×;Ñ;ó #à—‘˜vŸ}™}×1Ñ1Ó3Ô4Ø× Ñ Ô"à$Ÿn™nò+FØ×/Ñ/°4Ñ7ØŸ™ØF×MÑMØ &§
¡
× 1Ñ 1°(Ð<OÓ PØ &§¡óõðŸ™Ø/×6Ñ6Ø &§
¡
× 1Ñ 1°(Ð<OÓ PØ &§ ¡ × 2Ñ 2°8Ð=PÓ QØ &§ ¡ óôð—|’|ØŸ ™ Ð&9×&@Ñ&@ÀÇÁÓ&NÕOà×(Ñ(Õ*ð)+ð*× Ñ Ö"ð5 #ô8 4Ð3Õ 4Ø O‰OÐ0Ô 1à N‰N˜4×8Ñ8×?Ñ?×DÑDÓFÔ Gà ×9Ñ9×AÑAóJ #à—=‘=Ð,Ø#Ÿ=™=×/Ñ/°Ð:MÓNDØ—M‘MØ! $  qÐ)Øõô
#0×"3Ñ"3°H·O±O×4FÑ4FÈÓ"LKØ—M‘MØ! (§/¡/×"4Ñ"4°QÐ!7°s¸;¸-ÀqÐIØôð
—‘˜xŸ™×3Ñ3Ó5°qÔ9ä˜8 [Õ1à—N‘N 8×#5Ñ#5×#<Ñ#<×#AÑ#AÓ#CÀQÔGà'/×'9Ñ'9×'AÑ'Aó3&˜ à&×+Ñ+Ð7Ø#.×#3Ñ#3×#:Ñ#:¸7ÐDWÓ#X˜DØ ŸM™MØ")¨$¨¨qР1Ø !õð
!ŸM™M¨G°K×4FÑ4F×4IÑ4IÈ!Ð3LÈAÐ*NÐPQÔRàŸ™ {×'9Ñ'9×'>Ñ'>Ó'@À!ÔDä" ;° Õ<Ø ŸN™N¨;×+@Ñ+@×+GÑ+G×+LÑ+LÓ+NÐPQÔRà1<×1FÑ1F×1NÑ1NóY  Ü#*¨=¸&Õ#AØ$(§M¡MØ(Cà,9×,>Ñ,>×,CÑ,CØ,9×,>Ñ,>×,FÑ,FÜ,0¯H©HØ0=×0BÑ0B×0GÑ0GÈó-.ô-FØ0=×0BÑ0B×0GÑ0GØ0=×0BÑ0B×0JÑ0Jó-.ð
+*ñ )*ð)*ô%&ð%)§N¡N°=×3GÑ3G×3LÑ3LÓ3NÐPRÔ$SØ$(§N¡N°=×3EÑ3E×3LÑ3L×3QÑ3QÓ3SÐUWÖ$Xð%Yô(!(¨ ×(=Ñ(=¸yÖ IØ$/×$9Ñ$9×$AÔ$Aà $§ ¡ ¨k¸2Ô >Ü7;Ü$*¨;×+@Ñ+@×+HÑ+H×+NÑ+NÓ+PÓ$Qó8"ò !&¡O C¨ð%)§M¡MØ(5×(<Ñ(<Ø,/Ø,6×,=Ñ,=Ø0@ÐBTó-.ç.4©f°W«oó    )*ð )+õ%&ò !&ðQ3&ðj× Ñ Ö"ðUJ #ðX × Ñ Ô ô DÐ/Ô 0Ø×(Ò(Ø×(Ñ(×/Ò/ð O‰O˜EÔ "Ø N‰N˜4×3Ñ3×:Ñ:×?Ñ?ÓAÔ BØ × Ñ Ô ô DÐ7Ô 8Ø×0Ò0Ø×0Ñ0×7Ò7ð O‰O˜MÔ *Ø N‰N˜4×;Ñ;×BÑB×GÑGÓIÔ JØ × Ñ Ô ä 4Ð0Ô 1Ø O‰OÐ/Ô 0Ø×1Ñ1ò     'Ø—‘˜sŸz™zŸ™Ó0Ô1ðTØ—M‘M (¬Z¸¿
¹
¿¹Ñ-HÑ"HÔIð× Ñ Ô"Ø—9“9Ø—N‘N 3§9¡9§>¡>Ó#3°QÔ7Ø×$Ñ$Õ&ð     'ð ?‰?Ô Ø O‰OÐ.Ô /Ø"×<Ñ<ò #
Ø—‘˜z×0Ñ0×5Ñ5Ó7Ô8Ø'×/Ñ/ò    EðØŸ ™ Ø&¨%¯)©)´_ÀUÇZÁZÑ5PÐQSÐQTÐ5UÐ)VÑVØõð    ð× Ñ Õ"ð #ô DÐ5Ô 6ܐD×2Ñ2Ó3°aÒ7à O‰OÐ@Ô AØ×4Ñ4ò <Ø—‘˜rŸy™yŸ~™~Ó/Ô0ܘ2˜|Õ,°·±Ñ1JØ—N‘N 2§=¡=×#5Ñ#5Ó#7¸Õ;ð <ð
}‰}‹Ðùòg    !Yùò6%&øôn òTØ—M‘MÐ":×"AÑ"AÀ#Ç*Á*Ç/Á/Ó"R×SðTûô"$òØŸ ™ Ø2°e·i±iÀÇÁÐ5LÑLÈa÷ðús>Ø7AY
Ý'AY    
ÁQ/AYÁT85AZÁY=AZÁZAZÁZ4A[
Á[    A[
c    ó—i}|j«}|r||d<|jj«|d<|jj«|d<|jj«|d<t t d«}g|d<|D]3}t|j|d«sŒ|dj|d«Œ5t|d«r)|j|jj«|d<t td
«}g|d <|D]3}t|j|d«sŒ|d j|d«Œ5g|d <t td «}|jD]Ñ}|j«}|d j|«g|d<|D])}t||d«sŒ|dj|d«Œ+|j«|d<t|j!«|d<t"|j%«|d<t&|j)«|d<t*€Œ¿|j-«|d<ŒÓt|d«rgt|jd«rQg|d<t/|jj0«D]*\}    }
|
€Œ    |dj|
j««Œ,t|d«r;g|d<t/|j2«D]\}    } g} | j| j««t|d«r,| j|j4|    j««t|d«rt7|j8«|    kDr„g} | j| «|j8|    D]^}| j|j««t|d«r†i}|j:D]c}| j=|j««|j>|d<tA|jBjE««D] }|d||d<ŒŒe| j|«Œµt|d«sŒÂ|jFD]Ž}i}t|d«sŒ| j=|j««tA|jHjK««d|tA|jHjM««d<| j|«ŒŒa|dj| «Œ t|d«rÆg|d<|dj|jNjPj««|jNjRD]r}i}|jTN|jW|jX|jT|jZd œ«|j\r|j\|d!<|dj|«Œtt|d"«rîg|d#<|j^D]Ú}g}|d#j|«|j|jPj««|j`D]Š}i}|jbd$ur|jd|d%<|jX|d&<n-|jd|d%<|jZ|d'<|jf|d(<|jhr|jh|d)<|j|«ŒŒŒÜt|d*«r¯g|d+<|jjD]›}i}|d+j|«|jW|jPj««|jZ|d%<|jBD]<}i}|jW|jPj««|jZ|d%<Œ>Œt|d,«rîg|d-<|jlD]Ú}g}|d-j|«|j|jPj««|j`D]Š}i}|jbd$ur|jd|d%<|jX|d&<n-|jd|d%<|jZ|d'<|jf|d(<|jhr|jh|d)<|j|«ŒŒŒÜt|d.«rñg|d/<|d/j|jnjPj««|jnjBD]œ}i} |jZ|jZ| d'<nC|jPjptrju|jPjpd0«f| d1<| jW|jPj««|d/j| «t|d2«sŒ¯g}!|!j|jvjPj««|d/j|!«|jvjBD]‹}"i}#|"jZ|"jZ|#d'<n|"jPjp|#d1<|#jW|"jPj««|!j|#«t|"d2«sŒ‚g}$|$j|"jvjPj««|!j|$«|"jvjBD]}%t|%d3«sŒi}&|%jxjz|&d4<|%jxj||&d5<t~ju|%jxjzd6«|&d7<t|%jxjz|%jxj|«|&d8<|&jW|%jPj««|&jW|%jxjPj««|$j|&«Œt|"jvd9«sŒ|"jvj‚sŒ'tA|"jvj‚jE««D]5\}    }'|$j|'j…d:d;«j‡d<««Œ7ŒŽŒŸt|d=«rI|jˆr=|jˆjPr'|jˆjPj«|d><t|d?«rI|jŠr=|jŠjPr'|jŠjPj«|d@<t|dA«r–g|dB<|jŒD]‚}(i})|dBj|)«|)jW|(jPj««tŽju|(jPj|(jPj«|)dC<Œ„|j“«r¢g|dD<|j”D]Ž}*g}+|dDj|+«|+j|*jPj««|*jBD]>},i}-|+j|-«|,j–|-dE<    t˜|,jšdFd    |-dC<Œ@Œ|S#tœ$r|,jš|-dC<YŒ_wxYw)Gz5Dump all the PE header information into a dictionary.rŽrlrrryr^rrr=Nr_r€rrKÚEntropyÚMD5ÚSHA1ÚSHA256ÚSHA512rrrr‘rrÂrr·r7rr>r,r’r“rärr–TÚDLLrÓrÖÚHintÚBoundr—r˜r™ršrnr›rMr…rsr.r:r<r9Ú    LANG_NAMEÚ SUBLANG_NAMErƒrr rªržrŸr‰r r¡r¢rSr£r”r4)Or“rlr,rrryrZrzr
r”rMr=rrLr:r_r    rirrbrrdrrgrrrrrDrÂrr“r·rªrÃr¿rr>rkrRr,rErÛrËr‚rÈrírärrr>rr?rÉr—r™rnr…r€r;rsr.rurvr:rArƒrirHržr‰r¡r¦rSr‡r†rœr§rùr‡).rrr,r¨r•rYr›rNrÛÚ section_dictrrsÚvs_vinfoÚversion_info_listÚ fileinfo_listr>Ústringtable_dictrËrªr«Úvar_dictr¬Ú export_dictr­Ú import_listr%Ú symbol_dictr®Úbound_imp_desc_dictr¯Úbound_imp_ref_dictÚ module_listrpÚresource_type_dictÚdirectory_listr“Úresource_id_dictÚresource_id_listr•Úresource_lang_dictrqreÚdbg_dictr±Úbase_reloc_listr²Ú
reloc_dicts.                                              rr,z PE.dump_dict¼sØ €ðˆ    à×$Ñ$Ó&ˆÙ Ø,4ˆIÐ(Ñ )à"&§/¡/×";Ñ";Ó"=ˆ    ,ÑØ"&§/¡/×";Ñ";Ó"=ˆ    ,ÑØ#'×#3Ñ#3×#=Ñ#=Ó#?ˆ    -Ñ ä$Ô%:¸MÓJˆ àˆ    'ÑØò    3ˆDܐt×'Ñ'¨¨a©Õ1ؘ'Ñ"×)Ñ)¨$¨q©'Õ2ð    3ô 4Ð*Ô +°×0DÑ0DÐ0PØ+/×+?Ñ+?×+IÑ+IÓ+KˆIÐ'Ñ (ä$2Ü Ð!<ó%
Ð!ð+-ˆ    Ð&Ñ'Ø-ò    @ˆDܐt×+Ñ+¨T°!©WÕ5ØÐ.Ñ/×6Ñ6°t¸A±wÕ?ð    @ð$&ˆ    -Ñ ä&Ô'>À ÓMˆ Ø—}‘}ò    CˆGØ"×,Ñ,Ó.ˆLØ mÑ $× +Ñ +¨LÔ 9Ø$&ˆL˜Ñ !Ø%ò :Ü˜7 D¨¡GÕ,Ø  Ñ)×0Ñ0°°a±Õ9ð :ð'.×&9Ñ&9Ó&;ˆL˜Ñ #܈Ø&-×&:Ñ&:Ó&< ˜UÑ#ÜÐØ'.×'<Ñ'<Ó'> ˜VÑ$ÜÐ!Ø)0×)@Ñ)@Ó)B ˜XÑ&ÜÑ!Ø)0×)@Ñ)@Ó)B ˜XÒ&ð!    Cô$ 4Ð*Ô +´Ø ×  Ñ  Ð"2ô1
ð(*ˆImÑ $ä"+¨D×,@Ñ,@×,OÑ,OÓ"Pò K‘YØÑ(ؘmÑ,×3Ñ3°I×4GÑ4GÓ4IÕJð Kô 4Ð)Õ *Ø/1ˆIÐ+Ñ ,Ü!*¨4×+>Ñ+>Ó!?ó  K‘ XØ$&Ð!Ø!×(Ñ(¨×);Ñ);Ó)=Ô>ä˜4Ð!3Ô4Ø%×,Ñ,¨T×-BÑ-BÀ3Ñ-G×-QÑ-QÓ-SÔTä˜4 Õ,´°T·]±]Ó1CÀcÓ1IØ$&MØ%×,Ñ,¨]Ô;Ø!%§¡¨sÑ!3óC˜Ø%×,Ñ,¨U¯_©_Ó->Ô?ä" 5¨-Ô8Ø/1Ð,Ø,1×,=Ñ,=òR Ø -× 4Ñ 4°X×5GÑ5GÓ5IÔ JØ=E¿_¹_Р0°Ñ :Ü15°h×6FÑ6F×6LÑ6LÓ6NÓ1Oò!R IØENÈqÁ\Ð$4°Y¸q±\Ò$Bñ!RðRð
*×0Ñ0Ð1AÕBä$ U¨EÕ2Ø-2¯Y©YòC     Ø+- Ü#*¨9°gÕ#>Ø$1×$8Ñ$8¸×9LÑ9LÓ9NÔ$OÜPTØ(1¯©×(>Ñ(>Ó(@óQ&à&'ñQ) H¬T°)·/±/×2FÑ2FÓ2HÓ-IÈ!Ñ-LÑ$Mð%2×$8Ñ$8¸Õ$BòCðCð,Ð/Ñ0×7Ñ7Ð8IÖJðA  KôD 4Ð1Ô 2Ø,.ˆIÐ(Ñ )Ø Ð(Ñ )× 0Ñ 0Ø×+Ñ+×2Ñ2×<Ñ<Ó>ô ð×5Ñ5×=Ñ=ò BØ  Ø—>‘>Ð-Ø×&Ñ&à'-§~¡~Ø#)§>¡>Ø$*§K¡Kñôð×'Ò'Ø39×3CÑ3C˜  KÑ0ØÐ,Ñ-×4Ñ4°[ÕAð Bô 4Ð1Ô 2Ø,.ˆIÐ(Ñ )Ø×5Ñ5ò 4Ø  ØÐ,Ñ-×4Ñ4°[ÔAØ×"Ñ" 6§=¡=×#:Ñ#:Ó#<Ô=Ø$Ÿn™nò 4FØ"$KØ×/Ñ/°4Ñ7Ø-3¯Z©Z˜  EÑ*Ø17·±˜  IÒ.à-3¯Z©Z˜  EÑ*Ø.4¯k©k˜  FÑ+Ø.4¯k©k˜  FÑ+à—|’|Ø/5¯|©|˜  GÑ,Ø×&Ñ& {Õ3ñ 4ð     4ô$ 4Ð7Ô 8Ø)+ˆIoÑ &Ø"&×"CÑ"Cò
CØ&(Ð#ؘ/Ñ*×1Ñ1Ð2EÔFà#×*Ñ*¨>×+@Ñ+@×+JÑ+JÓ+LÔMØ-;×-@Ñ-@Ð# EÑ*à%3×%;Ñ%;òCMØ)+Ð&Ø&×-Ñ-¨m×.BÑ.B×.LÑ.LÓ.NÔOØ0=×0BÑ0BÐ& uÒ-ñCð
Cô 4Ð7Ô 8Ø24ˆIÐ.Ñ /Ø×;Ñ;ò 4Ø  ØÐ2Ñ3×:Ñ:¸;ÔGØ×"Ñ" 6§=¡=×#:Ñ#:Ó#<Ô=à$Ÿn™nò 4FØ"$KØ×/Ñ/°4Ñ7Ø-3¯Z©Z˜  EÑ*Ø17·±˜  IÒ.à-3¯Z©Z˜  EÑ*Ø.4¯k©k˜  FÑ+Ø.4¯k©k˜  FÑ+à—|’|Ø/5¯|©|˜  GÑ,Ø×&Ñ& {Õ3ñ 4ð  4ô& 4Ð3Õ 4Ø.0ˆIÐ*Ñ +Ø Ð*Ñ +× 2Ñ 2Ø×-Ñ-×4Ñ4×>Ñ>Ó@ô ð!×9Ñ9×AÑAóG &Ø%'Ð"à—=‘=Ð,Ø19·±Ð& vÒ.ð!Ÿ™×*Ñ*Ü%×)Ñ)¨(¯/©/×*<Ñ*<¸cÓBð0Ð& tÑ,ð
#×)Ñ)¨(¯/©/×*CÑ*CÓ*EÔFØÐ.Ñ/×6Ñ6Ð7IÔJä˜8 [Õ1Ø%'NØ"×)Ñ)¨(×*<Ñ*<×*CÑ*C×*MÑ*MÓ*OÔPØÐ2Ñ3×:Ñ:¸>ÔJà'/×'9Ñ'9×'AÑ'Aó4&˜ Ø+-Ð(à&×+Ñ+Ð7Ø7B×7GÑ7GÐ,¨VÒ4à5@×5GÑ5G×5JÑ5JÐ,¨TÑ2à(×/Ñ/° ×0BÑ0B×0LÑ0LÓ0NÔOØ&×-Ñ-Ð.>Ô?ä" ;° Õ<Ø/1Ð,Ø,×3Ñ3Ø +× 5Ñ 5× <Ñ <× FÑ FÓ Hôð+×1Ñ1Ð2BÔCà1<×1FÑ1F×1NÑ1NóP  Ü#*¨=¸&Õ#AØ9;Ð$6ØAN×ASÑAS×AXÑAXÐ$6°vÑ$>ð)6×(:Ñ(:×(BÑ(Bð%7Ø(1ñ%&ôGKÇhÁhØ(5×(:Ñ(:×(?Ñ(?ÀóG&Ð$6°{Ñ$Cô
)BØ(5×(:Ñ(:×(?Ñ(?Ø(5×(:Ñ(:×(BÑ(Bó)&ð%7Ø(6ñ%&ð %7×$=Ñ$=Ø(5×(<Ñ(<×(FÑ(FÓ(Hô%&ð%7×$=Ñ$=Ø(5×(:Ñ(:×(AÑ(A×(KÑ(KÓ(Mô%&ð%5×$;Ñ$;Ð<NÖ$Oð-Pô0!(¨ ×(=Ñ(=¸yÖ IØ$/×$9Ñ$9×$AÔ$Aä7;Ø$/×$9Ñ$9×$AÑ$A×$GÑ$GÓ$Ió8"ò!&¡O C¨ð%5×$;Ñ$;Ø(2×(9Ñ(9Ø,<Ð>Pó)*ç*0©&°«/õ%&ò!&ò[4&ð'G &ôT DÐ/Ô 0Ø×(Ò(Ø×(Ñ(×/Ò/à#×7Ñ7×>Ñ>×HÑHÓJˆIeÑ ô DÐ7Ô 8Ø×0Ò0Ø×0Ñ0×7Ò7ð×0Ñ0×7Ñ7×AÑAÓCð Øñ ô 4Ð0Ô 1Ø-/ˆIÐ)Ñ *Ø×1Ñ1ò TØØÐ-Ñ.×5Ñ5°hÔ?Ø—‘ §
¡
× 4Ñ 4Ó 6Ô7Ü#-§>¡>°#·*±*·/±/À3Ç:Á:Ç?Á?Ó#S˜Ò ð     Tð ?‰?Ô Ø,.ˆIÐ(Ñ )Ø"×<Ñ<ò 8
Ø"$ØÐ,Ñ-×4Ñ4°_ÔEØ×&Ñ& z×'8Ñ'8×'BÑ'BÓ'DÔEØ'×/Ñ/ò8EØ!#JØ#×*Ñ*¨:Ô6Ø(-¯    ©    J˜uÑ%ð8Ü-<¸U¿Z¹ZÑ-HÈÈÐ-M˜
 6Ò*ñ 8ð     8ðÐøô$ò8Ø-2¯Z©Z˜
 6Ó*ð8úsùy/ù/z
ú    z
cóD—    |j|«S#t$rYywxYw)z;Gets the physical address in the PE file from an RVA value.N)rTrhrSs  rÚget_physical_by_rvazPE.get_physical_by_rvaâs*€ð    Ø×+Ñ+¨CÓ0Ð 0øÜò    Ùð    ús ‚“    žcó4—tjd|dz«S)zMReturn a four byte string representing the double word value (little endian).r£ìÿÿ©rEr )rrÚdwords  rÚget_data_from_dwordzPE.get_data_from_dwordís€ä{‰{˜4 ¨Ñ!3Ó4Ð4rcóv—|dzdzt|«kDrytjd||dz|dzdz«dS)aConvert four bytes of data to a double word (little endian)
 
        'offset' is assumed to index into a dword array. So setting it to
        N will return a dword out of the data starting at offset N*4.
 
        Returns None if the data can't be turned into a double word.
        r7rCNrr©rDrErF©rrr.rÞs   rräzPE.get_dword_from_datañóF€ð Q‰J˜!Ñ œc $›iÒ 'Øä}‰}˜T 4¨°©
°f¸q±jÀAÑ5EÐ#FÓGÈÑJÐJrcóf—    |j|j|d«d«S#t$rYywxYw)z Return the double word value at the given RVA.
 
        Returns None if the value can't be read, i.e. the RVA can't be mapped
        to a file offset.
        rCrN)rär›r’rSs  rrzPE.get_dword_at_rvaÿs7€ð    Ø×+Ñ+¨D¯M©M¸#¸qÓ,AÀ1ÓEÐ EøÜò    Ùð    ús ‚!$¤    0¯0có~—|dzt|j«kDry|j|j||dzd«S)zFReturn the double word value at the given file offset. (little endian)rCNr)rDrErärýs  rÚget_dword_from_offsetzPE.get_dword_from_offset ó>€ð A‰:œ˜DŸM™MÓ*Ò *Øà×'Ñ'¨¯ © °f¸vȹzÐ(JÈAÓNÐNrcóD—|j||j|««S)zLSet the double word value at the file offset corresponding to the given RVA.)Úset_bytes_at_rvarØ)rrrœr×s   rÚset_dword_at_rvazPE.set_dword_at_rvaó €à×$Ñ$ S¨$×*BÑ*BÀ5Ó*IÓJÐJrcóD—|j||j|««S)z3Set the double word value at the given file offset.)rÛrØ)rrrÞr×s   rrÙzPE.set_dword_at_offsetó €à×'Ñ'¨°×0HÑ0HÈÓ0OÓPÐPrcó.—tjd|«S)zFReturn a two byte string representing the word value. (little endian).ršrÖ©rrrýs  rÚget_data_from_wordzPE.get_data_from_wordó€ä{‰{˜4 Ó&Ð&rcóv—|dzdzt|«kDrytjd||dz|dzdz«dS)a Convert two bytes of data to a word (little endian)
 
        'offset' is assumed to index into a word array. So setting it to
        N will return a dword out of the data starting at offset N*2.
 
        Returns None if the data can't be turned into a word.
        r7r?NršrrÚrÛs   rr»zPE.get_word_from_data#rÜrcój—    |j|j|«ddd«S#t$rYywxYw)z™Return the word value at the given RVA.
 
        Returns None if the value can't be read, i.e. the RVA can't be mapped
        to a file offset.
        Nr?r)r»r›r’rSs  rÚget_word_at_rvazPE.get_word_at_rva1s<€ð    Ø×*Ñ*¨4¯=©=¸Ó+=¸b¸qÐ+AÀ1ÓEÐ EøÜò    Ùð    úó ‚#&¦    2±2có~—|dzt|j«kDry|j|j||dzd«S)z?Return the word value at the given file offset. (little endian)r?Nr)rDrEr»rýs  rÚget_word_from_offsetzPE.get_word_from_offset=s>€ð A‰:œ˜DŸM™MÓ*Ò *Øà×&Ñ& t§}¡}°V¸fÀq¹jÐ'IÈ1ÓMÐMrcóD—|j||j|««S)zESet the word value at the file offset corresponding to the given RVA.)râré)rrrœrýs   rÚset_word_at_rvazPE.set_word_at_rvaEs €à×$Ñ$ S¨$×*AÑ*AÀ$Ó*GÓHÐHrcóD—|j||j|««S)z,Set the word value at the given file offset.)rÛré)rrrÞrýs   rråzPE.set_word_at_offsetIs €à×'Ñ'¨°×0GÑ0GÈÓ0MÓNÐNrcó.—tjd|«S)zMReturn an eight byte string representing the quad-word value (little endian).ú<QrÖrès  rÚget_data_from_qwordzPE.get_data_from_qwordQrêrcóv—|dzdzt|«kDrytjd||dz|dzdz«dS)aConvert eight bytes of data to a word (little endian)
 
        'offset' is assumed to index into a word array. So setting it to
        N will return a dword out of the data starting at offset N*8.
 
        Returns None if the data can't be turned into a quad word.
        r7rKNrõrrÚrÛs   rÚget_qword_from_datazPE.get_qword_from_dataUrÜrcój—    |j|j|«ddd«S#t$rYywxYw)zžReturn the quad-word value at the given RVA.
 
        Returns None if the value can't be read, i.e. the RVA can't be mapped
        to a file offset.
        NrKr)rør›r’rSs  rÚget_qword_at_rvazPE.get_qword_at_rvacs<€ð    Ø×+Ñ+¨D¯M©M¸#Ó,>¸rÀÐ,BÀAÓFÐ FøÜò    Ùð    úrîcó~—|dzt|j«kDry|j|j||dzd«S)zDReturn the quad-word value at the given file offset. (little endian)rKNr)rDrErørýs  rÚget_qword_from_offsetzPE.get_qword_from_offsetoràrcóD—|j||j|««S)zJSet the quad-word value at the file offset corresponding to the given RVA.)rârö)rrrœÚqwords   rÚset_qword_at_rvazPE.set_qword_at_rvawrärcóD—|j||j|««S)z1Set the quad-word value at the given file offset.)rÛrö)rrrÞrþs   rÚset_qword_at_offsetzPE.set_qword_at_offset{rærcó„—t|t«s td«‚|j|«}|sy|j    ||«S)zèOverwrite, with the given string, the bytes at the file offset corresponding
        to the given RVA.
 
        Return True if successful, False otherwise. It can fail if the
        offset is outside the file's boundaries.
        údata should be of type: bytesF)rSrUÚ    TypeErrorrÓrÛ)rrrœr.rÞs    rrâzPE.set_bytes_at_rvaƒsC€ô˜$¤Ô&ÜÐ;Ó<Ð <à×)Ñ)¨#Ó.ˆÙØà×'Ñ'¨°Ó5Ð5rcó¢—t|t«s td«‚d|cxkrt|j«krny|j ||«yy)zÅOverwrite the bytes at the given file offset with the given string.
 
        Return True if successful, False otherwise. It can fail if the
        offset is outside the file's boundaries.
        rrFT)rSrUrrDrEÚset_data_bytes©rrrÞr.s   rrÛzPE.set_bytes_at_offset”sQ€ô˜$¤Ô&ÜÐ;Ó<Ð <à Ô +œ˜TŸ]™]Ó+Ô +ðð × Ñ  ¨Ô -ððrrÞr.có¢—t|jt«st|j«|_||j||t|«zyr)rSrErgrDrs   rrzPE.set_data_bytes¥s9€Ü˜$Ÿ-™-¬Ô3Ü% d§m¡mÓ4ˆDŒMà59ˆ ‰ f˜v¬¨D«    Ñ1Ñ2rcóH—|jD]“}|j|j|jj«}||j
z}|t |j«ksŒ[|t |j«ksŒt|j||j««Œ•y)zeUpdate the PE image content with any individual section data that has been
        modified.
        N)
r:r<r1r=r>r3rDrErr›)rrrÛÚsection_data_startÚsection_data_ends    rÚmerge_modified_section_datazPE.merge_modified_section_data«s˜€ð
—}‘}ò    LˆGØ!%×!:Ñ!:Ø×(Ñ(¨$×*>Ñ*>×*LÑ*Ló"Ð ð 2°G×4IÑ4IÑIÐ Ø!¤C¨¯ © Ó$6Ó6Ð;KÌcØ— ‘ óOó<ð×#Ñ#Ð$6¸×8HÑ8HÓ8JÕKñ    LrcóÀ —||jjz
}t|jj«dk\r¢|jjdjr}t |d«s|j tdg¬«t |d«s|jjd«nM|jD]=}d}|t|j«ksŒ|j|}|dz }|jtd    k(rnÙ|jtd
k(r@|j|j|j!|j«|zd z    d z«nƒ|jtd k(r=|j|j|j!|j«|zd z«n0|jtdk(r9|j#|j|j%|j«|z«ná|jtdk(r}|t|j«k(rŒs|j|}|dz }|j|j|j!|j«d z|jz|zdzd z    «nN|jtdk(r8|j'|j|j)|j«|z«|t|j«krŒŒ@||j_t |d«r7|j*D](}|j,D]}|xj.|z c_ŒŒ*t |d«r¤|j0j2xj4|z c_|j0j2xj6|z c_|j0j2xj8|z c_|j0j2xj:|z c_t |d«rÏ|j<j2}    t |    d«r!|    j>r|    xj>|z c_t |    d«r!|    j@r|    xj@|z c_ t |    d«r!|    jBr|    xjB|z c_!t |    d«r!|    jDr|    xjD|z c_"t |    d«r!|    jFr|    xjF|z c_#t |    d«r!|    jHr|    xjH|z c_$t |    d«r!|    jJr|    xjJ|z c_%t |    d«r!|    jLr|    xjL|z c_&t |    d«r!|    jNr|    xjN|z c_'t |    d«r!|    jPr|    xjP|z c_(|jRtTk(r-t |    d«r!|    jVr|    xjV|z c_+t |    d «r!|    jXr|    xjX|z c_,t |    d!«r!|    jZr|    xj\|z c_.t |    d"«r!|    j\r|    xj\|z c_.t |    d#«r#|    j^r|    xj^|z c_/y$y$y$y$y$y$)%a2Apply the relocation information to the image using the provided image base.
 
        This method will apply the relocation information to the image. Given the new
        base, all the relocations will be processed and both the raw data and the
        section's data will be fixed accordingly.
        The resulting image can be retrieved as well through the method:
 
            get_memory_mapped_image()
 
        In order to get something that would more closely match what could be found in
        memory once the Windows loader finished its work.
        rGrEr†rD©rízZRelocating image but PE does not have (or pefile cannot parse) a DIRECTORY_ENTRY_BASERELOCrr7rçrèr4rÊrérêrër¥rñrržr‰ÚLockPrefixTableÚEditListÚSecurityCookieÚSEHandlerTableÚGuardCFCheckFunctionPointerÚGuardCFDispatchFunctionPointerÚGuardCFFunctionTableÚGuardAddressTakenIatEntryTableÚGuardLongJumpTargetTableÚDynamicValueRelocTableÚCHPEMetadataPointerÚGuardRFFailureRoutineÚ$GuardRFFailureRoutineFunctionPointerÚ(GuardRFVerifyStackPointerFunctionPointerÚEnclaveConfigurationPointerN)0r=rûrDrr±rMr¾r†r;r”r†rÃrùr§ròrœrírãrrÿrúrrrËržrEÚStartAddressOfRawDataÚEndAddressOfRawDataÚAddressOfIndexÚAddressOfCallBacksr‰rrrrrrrrrrrÍrÐrrrrr)
rrÚ new_ImageBaseÚrelocation_differencer²Ú    entry_idxr>Ú
next_entryrÚfuncÚ load_configs
          rrfzPE.relocate_imageºs>€ð!.°×0DÑ0D×0NÑ0NÑ NÐô ×$Ñ$×3Ñ3Ó 4¸Ó 9Ø×$Ñ$×3Ñ3°AÑ6×;Ó;ä˜4Ð!<Ô=Ø×+Ñ+Ü!0Ð1RÑ!SРTð,ôô˜4Ð!<Ô=Ø—‘×&Ñ&ð9öð
"×;Ñ;ó\Eð !"IØ#¤c¨%¯-©-Ó&8Ó8à %§ ¡ ¨iÑ 8˜Ø! Q™˜    à Ÿ:™:¬Ð9SÑ)TÒTá à"ŸZ™Z¬?Ð;QÑ+RÒRð !×0Ñ0Ø %§    ¡    à$(×$8Ñ$8¸¿¹Ó$CØ&;ñ%<à')ñ%*ð#)ñ !)öð#ŸZ™Z¬?Ð;PÑ+QÒQð !×0Ñ0Ø %§    ¡    à$(×$8Ñ$8¸¿¹Ó$CØ&;ñ%<ð#)ñ    !)öð#ŸZ™Z¬?Ð;TÑ+UÒUð
!×1Ñ1Ø %§    ¡    Ø $× 5Ñ 5°e·i±iÓ @Ø"7ñ!8õð #ŸZ™Z¬?Ð;TÑ+UÒUð )¬C°· ± Ó,>Ò>Ù %à).¯©°yÑ)A˜JØ%¨™N˜IØ ×0Ñ0Ø %§    ¡    à%)×%9Ñ%9¸%¿)¹)Ó%DÈÑ%JØ&0§n¡nñ%5à&;ñ%<ð'1ñ%1ð
$&ñ !&õ    ð#ŸZ™Z¬?Ð;RÑ+SÒSð!×1Ñ1Ø %§    ¡    Ø $× 5Ñ 5°e·i±iÓ @Ø"7ñ!8ôðc$¤c¨%¯-©-Ó&8Ö8ð\ð|.;ˆD×  Ñ  Ô *ôtÐ5Ô6Ø×6Ñ6ò>CØ #§ ¡ ò>˜ØŸ š Ð(=Ñ=ž ñ>ð>ôtÐ2Ô3Ø×(Ñ(×/Ñ/×EÒEØ)ñÕEð×(Ñ(×/Ñ/×CÒCØ)ñÕCð×(Ñ(×/Ñ/×>Ò>ÐBWÑWÕ>Ø×(Ñ(×/Ñ/×BÒBØ)ñÕBôtÐ:Õ;Ø"×>Ñ>×EÑE ä˜KÐ):Ô;Ø#×3Ò3à×/Ò/Ð3HÑHÕ/ܘ;¨
Ô3¸ ×8LÒ8LØ×(Ò(Ð,AÑAÕ(ä˜KÐ)9Ô:Ø#×2Ò2à×.Ò.Ð2GÑGÕ.ä˜KÐ)9Ô:Ø#×2Ò2à×.Ò.Ð2GÑGÕ.ä˜KÐ)FÔGØ#×?Ò?à×;Ò;Ð?TÑTÕ;ä˜KÐ)IÔJØ#×BÒBà×>Ò>ÐBWÑWÕ>ä˜KÐ)?Ô@Ø#×8Ò8à×4Ò4Ð8MÑMÕ4ä˜KÐ)IÔJØ#×BÒBà×>Ò>ÐBWÑWÕ>ä˜KÐ)CÔDØ#×<Ò<à×8Ò8Ð<QÑQÕ8ä˜KÐ)AÔBØ#×:Ò:à×6Ò6Ð:OÑOÕ6à—L‘LÔ$AÒAÜ  Ð-BÔCØ#×7Ò7à×3Ò3Ð7LÑLÕ3ä˜KÐ)@ÔAØ#×9Ò9à×5Ò5Ð9NÑNÕ5ä˜KÐ)OÔPØ#×HÒHà×HÒHØ-ñÕHô˜KÐ)SÔTØ#×LÒLà×HÒHØ-ñÕHô˜KÐ)FÔGØ#×?Ò?à×;Ò;Ð?TÑTÖ;ð@ðHðW<ðy<ð :rcóP—|jj|j«k(Sr)r=ÚCheckSumÚgenerate_checksumrws rÚverify_checksumzPE.verify_checksum˜s"€à×#Ñ#×,Ñ,°×0FÑ0FÓ0HÑHÐHrcó´—|j«|_|jj«dz}d}t    |j«dz}t    |j«d|z
|dk7zz}t t |dz ««D]¢}|t |dz «k(rŒ|dzt |dz «k(r5|r3tjd|j|dzddd|z
zz«d}n/tjd|j|dz|dzdz«d}||z }|dk\sŒ˜|dz|d    z    z}Œ¤|d
z|d z    z}||d z    z}|d
z}|t    |j«zS) NrarrCr7rÈrrVrÕr3rÊr4)    rÆrEr=rûrDr¤r#rErF)rrÚchecksum_offsetr¨Ú    remainderÚdata_lenrLr×s       rr*zPE.generate_checksumœs€ðŸ
™
› ˆŒ ð×.Ñ.×>Ñ>Ó@À4ÑGˆàˆô˜Ÿ ™ Ó&¨Ñ*ˆ    Üt—}‘}Ó%¨!¨i©-¸IȹNÑ)KÑLˆä”s˜8 a™<Ó(Ó)ò     FˆAà”C˜¨!Ñ+Ó,Ò,ØØ1‰uœ˜X¨™\Ó*Ò+±    ÜŸ ™ ؘŸ™ q¨1¡u wÐ/°5¸AÀ    ¹MÑ3JÑKóàñ‘ôŸ ™  c¨4¯=©=¸¸Q¹ÀÀQÁÈÁÐ+KÓLÈQÑOà ˜Ñ ˆHؘ5Ó Ø$ zÑ1°hÀ"±nÑE‘ð     Fð˜vÑ%¨(°b©.Ñ9ˆØ ¨R¡Ñ0ˆØ˜fÑ$ˆðœ#˜dŸm™mÓ,Ñ,Ð,rcó—td}|j«s-|j«s||jjz|k(ryy)zùCheck whether the file is a standard executable.
 
        This will return true only if the file has the IMAGE_FILE_EXECUTABLE_IMAGE flag
        set and the IMAGE_FILE_DLL not set and the file does not appear to be a driver
        either.
        r[TF)rzÚis_dllr×ryrJ)rrÚEXE_flags  rÚis_exez    PE.is_exeÌsC€ô)Ð)FÑGˆð—‘”Ø—^‘^Ô%ؘD×,Ñ,×<Ñ<Ñ<ÀÒIààrcóP—td}||jjz|k(ryy)z„Check whether the file is a standard DLL.
 
        This will return true only if the image has the IMAGE_FILE_DLL flag set.
        rkTF)rzryrJ)rrÚDLL_flags  rr1z    PE.is_dllßs.€ô )Ð)9Ñ:ˆà t×'Ñ'×7Ñ7Ñ 7¸HÒ DØàrcó —t|d«s|jtdg¬«t|d«sytd«}|j    |j
Dcgc]}|j j«‘Œc}«rytd«}|j    |jDcgc]+}|jj«jd«‘Œ-c}«r)|jjtd    td
fvryycc}wcc}w) zžCheck whether the file is a Windows driver.
 
        This will return true only if there are reliable indicators of the image
        being a driver.
        rr=rF)s ntoskrnl.exeshal.dllsndis.syss bootvid.dlls    kdcom.dllT)spagespagedrrµrº)rMr¾r†rÉÚ intersectionrrrr:rÖr"r=Ú    SubsystemÚSUBSYSTEM_TYPE)rrÚ system_DLLsr)Údriver_like_section_namesrÛs     rr×z PE.is_driverìs€ô,tÐ5Ô6Ø × 'Ñ 'Ü,Ð-KÑLÐMð (ô ô tÐ5Ô6Øô Ø Tó
ˆ ð × #Ñ #Ø(,×(CÑ(CÖ D ˆSW‰W]‰]_Ò Dô
ðä$'Ð(;Ó$<Ð!Ø $× 1Ñ 1ØAEÇÁÖ O°gˆW\‰\× Ñ Ó !× (Ñ (¨Õ 1Ò Oô
ð ×  Ñ  × *Ñ *äÐ7Ñ8ÜÐ?Ñ@ðñ ð àùò! Eùò Ps Á!DÂ%0D có^‡—dŠt|j«fˆfd„    }t|d«r6||jj    «|j
j f«Š|jD] }||j|jf«ŠŒ"tdg}t|jj«D]8\}}||vrŒ     ||j|j«|jf«ŠŒ:t|j«t#‰«kDr t#‰«Sy#t $rYŒswxYw)zoGet the offset of data appended to the file and not contained within
        the area described in the headers.r¸cóV•—t|«|krt|«t‰«kDr|S‰Sr)Úsum)Úoffset_and_sizeÚ    file_sizeÚlargest_offset_and_sizes  €rÚ'update_if_sum_is_larger_and_within_filezQPE.get_overlay_data_start_offset.<locals>.update_if_sum_is_larger_and_within_file,s7ø€ô?Ó# yÒ0´S¸Ó5IÌCØ'óMò6ð'Ð&Ø*Ð *rr=rBN)rDrErMr=rûryr{r:r1r3r†rrrTr2r±r’r>)rrrBrÛÚskip_directoriesrrsrAs      @rÚget_overlay_data_start_offsetz PE.get_overlay_data_start_offset&s:ø€ð#)Ðô(+¨4¯=©=Ó'9õ    +ô 4Ð*Ô +Ù&Mà×(Ñ(×8Ñ8Ó:Ø×$Ñ$×9Ñ9ðó'Ð #ð—}‘}ò    ˆGÙ&MØ×)Ñ)¨7×+@Ñ+@ÐAó'Ñ #ð    ô
,Ð,LÑMÐNÐä'¨×(<Ñ(<×(KÑ(KÓLò        ‰NˆCØÐ&Ñ&Øð Ù*QØ×-Ñ-¨i×.FÑ.FÓGÈÏÉÐXó+Ñ'ð            ô ˆt}‰}Ó ¤Ð$;Ó <Ò <ÜÐ.Ó/Ð /àøô !ò Ùð úsÃ-D Ä     D,Ä+D,cóF—|j«}||j|dSy)zeGet the data appended to the file and not contained within the area described
        in the headers.N©rDrE©rrÚoverlay_data_offsets  rÚ get_overlayzPE.get_overlayTs/€ð#×@Ñ@ÓBÐà Ð *Ø—=‘=Ð!4Ð!5Ð6Ð 6àrcób—|j«}||jd|S|jddS)zKReturn the just data defined by the PE headers, removing any overlaid data.NrFrGs  rÚtrimzPE.trim_s;€ð#×@Ñ@ÓBÐà Ð *Ø—=‘=Ð!5Ð"5Ð6Ð 6à}‰}™QÐÐrcó¨—|tkDr>|jdur0t|«s%|jj    d|z«d|_t ||«S)NFz=If FileAlignment > 0x200 it should be a power of 2. Value: %xT)r"r>rdr;r”r&)rrr$r%s   rr<zPE.adjust_FileAlignmentvsT€Ø Ô:Ò :à×)Ñ)¨UÑ2¼<ÈÔ;WØ—‘×&Ñ&ØSØ%ñ'ôð.2Ô*ä)¨#¨~Ó>Ð>rcó¢—|tkr:||k7r5|jdur'|jjd||fz«d|_t    |||«S)NFzAIf FileAlignment(%x) < 0x200 it should equal SectionAlignment(%x)T)r"r?r;r”r*)rrr$r)r%s    rrAzPE.adjust_SectionAlignmentˆs_€Ø Ô:Ò :àÐ"3Ò3Ø×1Ñ1°UÑ:à—‘×&Ñ&ØWØ%Ð'8Ð9ñ:ôð15Ô-ä,¨SÐ2CÀ^ÓTÐTrr)NFF)rNrN©Fr)NF)rN)rN)r‚N)r‡)Nrª)ˆryrzr{r¤rkrxr…r|r~rqrÕrr3rÜrxr¦r¢r¯r³r´r¶r¹rºrWrXrRr6r@rCrDrErrrrr'r(r)Ú&__IMAGE_DYNAMIC_RELOCATION_V2_format__Ú(__IMAGE_DYNAMIC_RELOCATION64_V2_format__rrröÚMAX_SYMBOL_EXPORT_COUNTrorKrNrIrVrYrHr³r“r¹rŒrÆr‰r¾rêrérærçrrår,r9r:rärãr„r|r†râr²rÿrèrr*r.rár rCrlrrr›rQrTrråryrrrr‹rˆr‡rŠrŒr„r,rÓrØrärrßrãrÙrér»rírðròrårörørúrürÿrrârÛr#rUrr rfr+r*r3r1r×rDrIrKr<rArcrrrÒrÒ    s{„ñBðP#Ðð2 $Рð'Ð#ð
"(Ð$ðH!*Ð&ðF#IÐð'Ð#ð  0Ð,ð    *Ð&ð)Ð%ð"
+Ð'ð1Ð-ð
,Ð(ð
!Ðð
#Ðð&!Ðð
VÐàKÐàE€Nð#Ðð
%Ð!ð
(Ð$ð(Ð$ð
.Ð*ð
CÐ?ð
    BÐ>ð>Ð:ð
 
&Ð"ð
(Ð$ð/.Ð*ðb00Ð,ðd1Ð-ð
+Ð'ð
-Ð)ð
.Ð*ð
0Ð,ð
0Ð,ð
,Ð(ð
#ÐðØ ØØ2Øó 4òlòò
òò,ò,nò` Oòbò     ò$ó.5ònLð^TYó`4òDXòtuòn*ò83
òjX#òt@ó
;òz*òX&òPióVu'òn    ò0ò>s$ój G
òRHò
òkóZ ?ò.;ò`Bó2hð^Ø ó ] ó~BóHGòR!ó8 'òD-ò>*ð*1Bó    Pòòó)9òVòò  ò:òó1ó]ò~ còL    ò5ò Kò
òOòKòQò'ò Kò
òNòIòOò'ò Kò
òOòKòQò6ò"ð": Sð:°ó:ò Lò\Uò|Iò.-ò`ò& ò8òt,ò\    ò ò.
?ó$ UrrÒcó—ddl}d}|jdds t|«y|jddk(rŸ|jdds|jd«t    |jd«}|j
j D]M}tt|jj|jz«|j|j«ŒOytt    |jd«j««y)Nrz1pefile.py <filename>
pefile.py exports <filename>r7rìr?zerror: <filename> required)rÚargvr·ÚexitrÒr,rÛrr=rûrËrírÈr„)rÚusagerrös    rÚmainrV—sȀÛð  €Eð 8‰8AB‰<Ü ˆe Ø     ‰!‰˜    Ò    !؏x‰x˜˜‰|Ø H‰HÐ1Ô 2Ü —‘˜‘ ‹_ˆØ×,Ñ,×4Ñ4ò    ˆCÜ ÜB×&Ñ&×0Ñ0°3·;±;Ñ>Ó?ÀÇÁÈ3Ï;É;õ ñ    ô
    Œb—‘˜!‘‹o×'Ñ'Ó)Õ*rÚ__main__)rcFFrN) r¤Ú
__author__Ú __version__Ú __contact__rârarErhrrmrƒrPrWrÚtypingrÚhashlibrrrr    rrrrÚregister_errorÚ lookup_errorr#rrr&r*r/r6rrrDrrærÔr{rwrQrornrsrtrurvrwÚ IMAGE_NUMBEROF_DIRECTORY_ENTRIESrÏrÑrÎrÐr;Údirectory_entry_typesr†Úimage_characteristicsrzÚsection_characteristicsrLÚ debug_typesr¦Úsubsystem_typesr9Ú machine_typesrõÚrelocation_typesr§Údll_characteristicsrr"r1r6Ú    registersrRrMrVrfrorzr‰r¬r•r r¨Ú resource_typer€rur:rvr<r8r@r>r”rArPrZrardrGrÉrlrrhr’rªrÐrÓrærèr/rŸr‘r½rÂrÆràrârêrírïrñrórõr÷rÿrrrrr    rArLrUrernryrˆr”rŸr§r«r!Úascii_lowercaseÚascii_uppercaserÏrÇrÊrÎrTrUrgÚboolrÐrÒrVryrcrrú<module>rms3ðñð €
Ø€ Ø%€ ãÛ    Û Û Û Û Û Û Û åÝÝÝÝÝãÛãà€×ÑÐ)Ð+>¨6×+>Ñ+>Ð?QÓ+RÔSà
€ó
ñ" 4Ôñ&óð&ñ  4Ôñ óð òð €    ð
ÐðÐðÐØ€ØÐð€ ðÐðÐð!ÐàÐØÐØÐØÐØÐØÐàÐØ#%РØÐØ)ÐØ ÐØ %Ðò7òÐñ(Ð4Ó5€òÐñ&%Ð%:Ó;Ðò/Ðñb'Ð'>Ó?Ðò€ ñ*˜+Ó &€
ò€ñ"˜oÓ.€ò%€ ñN˜MÓ*€ ò ÐñÐ/Ó0€òÐñ$#Ð#6Ó7Ðà!&Ðò
Ðñ !Ð!2Ó3Ðò €    ñ& ˜Ó #€    ðÐØÐØÐØ€ØÐØÐØ€ ØÐØÐØÐò€ ñ0˜]Ó+€ ò_€ñBDÓ€òh €ñT wÓ
€ñ ˆw‹-€à#*ò0Ñ€L-Ø˜ÑØ Ñ×%Ñ% lÕ3à". ˆ Òð    0ò8òò. ò 'ò/ò*ô Rô R÷HñHôV Iô ÷&;ñ&;ðT
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
Ø    
ñÐñ& 4Ôñ+óð+ñ 4˜dÔ#ñ(ó$ð(÷VFñFôREyôEñP 4˜eÔ$ñNXó%ðNXôbi,˜Yôi,÷X%ñ%ô]ôô?"ô?"ôDCMôCô."ô."ôbmôô˜=ôô*˜Môô ôô˜Môô˜ôô"]ô"ôBˆmôô˜-ôô&]ôô˜ôô˜]ôôi$Ð'ôi$÷XOñOô28˜Nô8ô;˜~ô;ô8 ;˜~ô ;ô 
˜.ô
ô&X˜NôXô&Y˜~ôYô&X˜NôXô&Y˜~ôYô&H˜nôHô=
 ô=
÷@
ñ
ñDØ
×ÒØ ×Òñà ‡m‚mñð ñ óÐò-ñØ
×Ò˜V×3Ò3Ñ3°f·m²mÑCóÐñ
 4ÔàFKñ
Ø ˆS%˜Ð "Ñ#ð
Ø?Cð
à    ò
óð
÷@VUñ@VUòFl+ð* ˆzÒÙ…Fðr