1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
MZ@ !L!This program cannot be run in DOS mode. $#mvg g g c ntt g d j F G e f f Richg PEL7B~ &^p@ `  @XMp)0 -\p&@.text]^ `.data@Jpb@.idata.f@@.rsrcXMNz@@.reloc-0 .@B'@GsGtGP(@CCd)@CC'@CCCCp D D` D D D0 D D0 D@ DP D0 D0 D D@ D(@CC )@CC@)@CC\E\E[E07EP]E]E@7E\E@\Ep D DTFPTF DTF D0 D@ DP D0 D0 D UF@ DpECUF0VFPVF DpVFW@@W@=@ pB`BF H[B|DB?8BBAB8@BX?B3BL ,B&B1B8 B  BsB `BA AA HA~A1AoXACA`AWءAA4pA.hzA8nA. kAGQA!OA1KAGADADA2CA9A7 (8AC@3C @pC@C@ ĴCx@C @C @, C`@LC@ B@\C@ ,B@hC@5C(@CP@xC@C@Ch@ C@C@1C@0C@ C@/TC@.C @B @C@4C@C@ Cp@ ĶC@жC @2C h@C@6C @(@"@"@h$@H@`@"CثC@C$C@dCC@ ȬCC!@@DmC8C!@|CCCCLCxCCCCHCCCCC TCC@CC$CHC@CC0@ıC ܱCL@@@@@@@@@@,@@@x@@ @@@@T@@h@H@@@@@0@<@@@`@ @t@@0@l@ @P@D@ @\@@@@@l@ @t@@8@@$@8@@$@@`@<@@@ @l@ @@@@@@@@\@@@@@@@l@\@@C- C , to locale. Unknown exceptionMessageIdTypedefSeverityNamesFacilityNamesLanguageNamesMessageIdSeverityFacilitySymbolicNameLanguageOutputBaseMessageIdTypedefMacro.mc.dbg.rc.xsdrtrt,ccs=UTF-16LEunable to open input fileunable to open output file - %lserrorwarning%ls(%u) : %hs : Out of memory reading charsexpected keyword - %lsinvalid number - %lsinvalid character (0x%02x)bad array new lengthstring too longwtwt,ccs=UTF-8wt,ccs=UTF-16LETEMP.BINOut of memory reading messagesmessage "%.*ls" (0x%04x) has no translation for language %ls (0x%04x)1 WEVT_TEMPLATE "%ls%ls" Out of memory writing to output file - %ls.binwbWriting %ls LANGUAGE 0x%x,0x%x 1 11 "%ls_%ls" 1 11 "%ls" [%08lx .. %08lx] - %lu bytes Total of %lu messages, %lu bytes DWORD%ls : error : The symbol or name cannot be empty.The symbol or name "%ls" is invalid.The symbol or name "%ls" has been used more than once.// // Values are 32 bit values laid out as follows: // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // +-+-+-+-+-+---------------------+-------------------------------+ // |S|R|C|N|r| Facility | Code | // +-+-+-+-+-+---------------------+-------------------------------+ // // where // // S - Severity - indicates success/fail // // 0 - Success // 1 - Fail (COERROR) // // R - reserved portion of the facility code, corresponds to NT's // second severity bit. // // C - reserved portion of the facility code, corresponds to NT's // C field. // // N - reserved portion of the facility code. Used to indicate a // mapped NT status value. // // r - reserved portion of the facility code. Reserved for internal // use. Used to indicate HRESULT values that are not status // values, but are instead message ids for display strings. // // Facility - is the facility code // // Code - is the facility's status code // // // Values are 32 bit values laid out as follows: // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // +---+-+-+-----------------------+-------------------------------+ // |Sev|C|R| Facility | Code | // +---+-+-+-----------------------+-------------------------------+ // // where // // Sev - is the severity code // // 00 - Success // 01 - Informational // 10 - Warning // 11 - Error // // C - is the Customer code flag // // R - is a reserved bit // // Facility - is the facility code // // Code - is the facility's status code // // // Define the facility codes // #define %-32ls %ld #define %-32ls 0x%lX // // Define the severity codes // // // This file maps message Id values in to a text string that contains // the symbolic name used for the message Id. Useful for debugging // output. // struct { %ls MessageId; char *SymbolicName; } %lsSymbolicNames[] = {// // MessageId: %ls // MessageId: 0x%08lXL (No symbolic name defined) // // MessageText: // // (%ls) %ls, (char*) "%ls",#define %-32ls %ls(%ldL)#define %-32ls %ls(0x%08lXL)#define %-32ls ((%ls)%ldL)#define %-32ls ((%ls)0x%08lXL)#define %-32ls %ldL#define %-32ls 0x%08lXL %ls%ls(%d) : error : Duplicate message ID - 0x%x (%ls and %ls) Duplicate message ID - 0x%lx// %hs// %lsMC: Unable to open %ls for input MC: Compiling %ls Symbol name must follow %ls=Equal sign must follow %lsIllegal value for %ls=Number must follow %ls=Left parenthesis name must follow %ls=Invalid message file token - '%ls' (%ls) 0xFFFFFFFF, NULL }; Out of memory parsing memory definitions.Invalid message definition - text missing.Number must follow %ls=+Symbol name must follow %ls=+Message Id value (%lx) too largeInvalid message definition token - '%ls'MC: failed to allocate memory. . No symbolic name defined for0x%08lXL // %lsLanguageId=MessageId=Unterminated message definitionMessage text too long (> %lu)Message text larger than size specified by -m %luFile name must follow =%lu:Colon must follow =%luEqual sign name must follow %lsValue is too large (> %lx)CodePage %d is invalidUsing CodePage %d for Language %04x CodePage must follow %ls=:Invalid name - %lsMissing name after %ls=map/set too longRedefining value of %lsOut of memory capturing name.Out of memory copying string.rbmc : error : errno %u trying to open file <%ls>. mc : error : More than one message file was specified. Only one message file can be compiled per invocation of mc. \Microsoft (R) Message Compiler Version %u.%u.%04u Copyright (c) Microsoft Corporation. All rights reserved. Usage: MC [-?aAbcdnouUv] [-m ] [-h ] [-e ] [-r ] [-x ] [-w ] [-W ] [-z ] [-cp ] [-km | -um | -generateProjections | -cs ] [-mof] [-p ] [-P ] [] [...] -? - Displays this message. -a - Indicates that the input .mc file is CP_ACP (default). Ignored if the .mc file has a UTF-8 or UTF-16LE BOM. -A - DEPRECATED. Encode .BIN messages using CP_ACP (ANSI). -b - .BIN filename should have .mc filename included for uniqueness. -c - Sets the Customer bit in all of the message IDs. -d - FACILITY and SEVERITY values should be printed as decimal in header file (default is hexadecimal). -e - The extension for the C include file (1-3 chars). -h - The path for the C include file. Default is: ".\" -m - Warn if any message exceeds characters. -n - NUL-terminate all message table strings. -o - Generate OLE2 header file (use HRESULT definition instead of status code definition). -r - The directory for the RC include file and the binary message resource files it includes. Default is: ".\" -s - Generate a separate binary resource per provider. Generate summary global resource MCGenResource.BIN. -t - Validate against baseline resource. -u - Indicates that the input .mc file is UTF-16LE. This flag is required when the .mc file is UTF-16LE without a BOM. Ignored if the .mc file has a UTF-8 or UTF-16LE BOM. -U - Encode .BIN messages using UTF-16LE (default). -U8 - Encode .BIN messages using UTF8. Resulting message table is supported on Windows 10 2004 (build 19041) or later. -v - Enables verbose output. -W - The path to a custom winmeta.xml file (rarely needed). -w - The path to a custom eventman.xsd file (rarely needed). -x - The path for the .dbg C include file that maps message IDs to their symbolic names. This option can only be used with a message text file. -z - The base name of the generated files. Default is the base name of the input file. - The name of a manifest file to compile. - The name of a message file to compile (no more than 1). Code Generation Options ----------------------- -cp - Generated text files will use the specified character encoding. Valid encoding names include "ansi" (default), "utf-8", and "utf-16". The UTF encodings will add a byte order mark (BOM). -um - Generate C/C++ logging macros. -km - Generate C/C++ logging macros with activity ID. -generateProjections - Generate logging interfaces projectable to JavaScript. -generateTemplateProjections - Generate logging interfaces projectable to JavaScript that reduce projection cost. -generateTemplateStubs - Override the default template wrapping stubs file from WinRTTemplateProviderStubs.js to .js. -cs - Generate C# (managed) logging class based on the .NET 3.5 Eventing class. -css - Generate static C# (managed) logging class based on the .NET 3.5 Eventing class. -co - Generate EventWrite macros that invoke an MCGEN_CALLOUT macro. Not supported (ignored) for C#. -mof - DEPRECATED. Generate downlevel (XP-compatible) functions and macros for ETW. Generate a MOF file describing the ETW events. The MOF file will be generated in the location specified by the "-h" switch. -p - Defines the macro name prefix applied to each generated logging macro. Default is: "EventWrite" -P - Specifies text at the start of each event symbol name to remove before forming the macro names. -contextSuffix - Defines the macro name suffix applied to each generated FORCONTEXT logging macro. Default is: "ForContext" Warning Suppression ----------------------- -wdEncoding - No warning for unrecognized XML encoding. -wdInsert - No warning for string with unexpected inserts. Notes: - The 'A' and 'mof' switches are deprecated and will be removed in the future. - At most one .mc file can be processed per invocation of mc.exe. - The mofcomp and rc tools do not currently support UTF-8 input. If a UTF-8 encoding is requested, the MOF and RC files will be generated as UTF-16LE. vector too longMSG0000%dMSG00001bad allocationInsertEncodingmc : error : %hs failed 0x%X CoCreate(DOMDocument60)xmlDoc.put_asyncCoCreate(XMLSchemaCache60)xmlDoc.get_parseErrormc : error : file "%ls" not found %ls : error : %ls%ls(%u,%u) : error : %lsbuilt-in.xsdmc : error : Failed to create memory stream mc : error : Failed to load "%ls" http://schemas.microsoft.com/win/2004/08/eventsmc : error : Failed to add "%ls" to the schema cache (expecting a schema for namespace "%ls") xmlDoc.putref_schemashttp://www.w3.org/2001/XMLSchemahttp://manifests.microsoft.com/win/2004/08/windows/eventshttp://schemas.microsoft.com/win/2004/08/events/tracexmlNode.get_textxmlns:evt='http://schemas.microsoft.com/win/2004/08/events' xmlns:asm='urn:schemas-microsoft-com:asm.v3'/evt:instrumentationManifest/evt:instrumentation/evt:events/evt:provider/asm:assembly/asm:instrumentation/evt:events/evt:providerevt:templates/evt:template//evt:dataSelectionNamespacesxmlDoc.setSelectionNamespacesxmlDoc.selectNodesnodeList.get_lengthinTypeoutTypeproviderList->nextNodeproviderNode.selectNodestypeList.nextNodedataNode.AsElementdataNode.GetInTypedataNode.GetOutTypenamespace::providerNode.selectSingleNodedataElement.selectSingleNode%ls : error : Invalid namespace prefix for type '%ls'. Prefix must resolve to one of the following namespaces: '%ls', '%ls', '%ls'. INCLUDEmc%ls : warning : %hs (-wd%ls) %ls : warning : %hs %ls : error : %hs %ls(%u,%u) : error : %hs $(mc.__mcId__Manifest File Name: %ls. Schema File Name: %ls. Winmeta File Name: %ls. MetadataResourceFileName: %lsMC: error : Failed creating provider resources for manifest %ls %ls : error : The generated header file for the .mc file and the manifest will not have unique names. r, ccs=UNICODEinstrumentationManParseXml: Failed HR = %d %ls MC: error : Failed creating single provider resources for manifest %ls man*Target dir is %ls No files Found in %ls File %ls Failed to parse manifest : %ls Couldn't find next file, GetLastError() = 0x%08X. Failed to create global resource file mc : error : CoInitialize failed, error = 0x%x .WinRTTemplateProviderStubsApplicationSuccessInformationalWarningErrorEnglish.\hcontextSuffixcsscsmc : error : Missing name space argument for -cs or -css switch. mc : error : Missing argument for -%ls switch. cocpmc : error : Invalid encoding argument for -cp "%ls". mc : error : Invalid argument for -e switch. mc : error : Missing argument for -%c switch. generateTemplateProjectionsgenerateTemplateStubsmc : error : generateTemplateStubs argument too large mc : error : Missing argument for -generateTemplateStubs switch. generateProjectionsmc : error : Invalid switch: %c. kmmofmc : error : Invalid argument (%ls) for -%c switch. NoVersionmc : error : Prefix too large, max size allowed 16 chars mc : error : Invalid baseline path name %ls mc : error : Missing Baseline argument for -%c switch. umu8mc : error : Invalid switch: -%ls. mc : error : Choose -um, -km or -cs option mc : error : -km is not allowed with -um, -winrt or -cs option mc : error : choose either -generateProjections or -cs option, not both mc : error : choose either -um or -cs option, not both mc : error : Both ANSI and Unicode input were specified. mc : error : Both ANSI and Unicode output were specified. mc : error : Both UTF8 and Unicode output were specified. mc : error : Both ANSI and UTF8 output were specified. mc : error : -u switch was specified but .mc file "%ls" has no BOM and does not appear to be UTF-16. mc : error : -u switch was not specified but .mc file "%ls" has no BOM and appears to be UTF-16. mc : error : -x switch cannot be used without a legacy .mc file! mc : error : ErrorCode=0x%x mc : error : ErrorCode=%u mc : error : %hs mc : error : Internal error invalid string_view positionjو_@2Qjو_@2Qansiutf8utf-8utf16utf16leutf-16utf-16leucs2ucs2leucs-2ucs-2le3)6{O>`Ȅ97EDEjޕ3)6{O>` Root element of an instrumentation manifest. Not a valid root element for an instrumentation manifest. Used when storing instrumentation data within other XML documents. An instrumentation manifest may contain MESSAGETABLE strings, ETW providers, and/or a Windows Performance Counter V2 provider. Manifests containing MESSAGETABLE strings can be compiled with mc.exe. Manifests containing ETW providers can be compiled with mc.exe, installed or uninstalled with wevtutil.exe, and used with TDH APIs or ETW tools to decode ETL traces. Manifests containing a Performance Counter V2 provider can be compiled with ctrpp.exe, installed using lodctr.exe, and uninstalled using unlodctr.exe. Note that instrumentation manifests must be uninstalled before they can be reinstalled. May contain MESSAGETABLE strings, ETW providers, and/or a Windows Performance Counter V2 provider. The events element is used for MESSAGETABLE strings and ETW providers. The counters element (defined in the counterman.xsd schema) is used for a Windows Performance Counter V2 provider. Contains MESSAGETABLE strings and ETW providers. Defines an ETW provider. A provider is a unit of organization for ETW event definitions. At runtime, the provider GUID is used when opening the ETW handle. When collecting a trace, the provider's control GUID is used to enable or disable the collection of the provider's events. Within the trace data, the provider GUID identifies the provider as the source of the event. When the trace data is processed, the provider GUID is used to match an event to the manifest that contains the event definitions needed to decode it. A manifest-based ETW provider has a decode GUID (used to locate the manifest) and a control GUID (used to enable the provider or filter events). Normally, the same GUID (the provider guid) is used for both decode and control. If distinct values are needed for the decode and control GUIDs, set the "guid" attribute to the decode GUID and set the "controlGuid" attribute to the control GUID. Note that to avoid provider name conflicts, if the controlGuid attribute is used, the provider name must end with the decode guid, e.g. guid="{54bab802-bb0b-4b4a-9ce9-7360a0120b3e}" name="MyProvider.54bab802bb0b4b4a9ce97360a0120b3e" controlGuid="{74d557d9-4a8e-4a3f-9a32-3f1a0eab71ba}" If a provider uses distinct decode and control GUIDs, the resulting traces may not decode properly when decoded on Windows versions prior to Windows 10 Fall Creators Update (2017). Note that distinct decode and control GUIDs are typically used to support tool-generated manifests and are generally unnecessary for hand-maintained manifests. Name of the executable file into which the provider's non-localized template resource is linked, usually the same as the provider's binary. Since the full install path of the provider binary is usually determined at install time, the value of this attribute is usually overridden by using wevtutil.exe's /rf:FullResourceFilePath parameter. Name of the executable file into which the provider's localizable message resource is linked, usually the same as the provider's binary. Since the full install path of the provider binary is usually determined at install time, the value of this attribute is usually overridden by using wevtutil.exe's /mf:FullMessageFilePath parameter. Deprecated. Use channels to describe the destinations for your events. Each channel you define here will show up in the Windows Event Viewer. Declares a channel that is used by events in this manifest but is not owned by this manifest. This may be used to reference well-known channels from winmeta.xml or to reference channels owned by other components that this manifest will depend upon. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Defines a channel that is used by events in this manifest and is owned by this manifest. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Default publishing session/security if not specified explicitly by the channel access attribute. Channel logging config Channel publishing config Amount of memory allocated for the session buffers (KB) Number of etl files to create across enablement Minimum number of session buffers Maximum number of session buffers Buffer flush interval (sec) Clock resolution Defines custom levels for use by this provider. Levels are used to filter events. Note that winmeta.xml provides predefined levels win:LogAlways, win:Critical, win:Error, win:Warning, win:Informational, win:Verbose. Custom levels must use values 16-255. Defines a custom level for use by this provider. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Defines custom tasks for use by this provider. A task is a localizable string label that can be applied to an event. Note that winmeta.xml provides predefined task win:None. Custom tasks must use values 1-65535. Defines a custom task for use by this provider. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Defines custom opcodes for use by this provider. An opcode is a semantic category for certain special types of event. For example, the Start opcode is used on events that trace the beginning of an activity, and the Stop opcode is used on events that trace the end. Note that winmeta.xml provides predefined opcodes win:Info, win:Start, win:Stop, win:DC_Start, win:DC_Stop, win:Extension, win:Reply, win:Resume, win:Suspend, win:Send, win:Receive. Custom opcodes must use values 10-239. Defines a custom opcode for use by this provider. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Defines custom keywords for use by this provider. A keyword is a bit (flag) that specifies a category that an event may belong to. Keywords are used to filter events. Note that winmeta.xml provides several predefined keywords. These keywords should only be used for their described purpose. The reserved keywords should not be used directly (mc.exe adds the reserved keywords to events as appropriate based on the event's channel). Custom keywords must use the low 48 bits of the keyword mask. Defines a custom keyword for use by this provider. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Each keyword must have a unique name, which is used to reference the keyword from the events section of the manifest. Mask is a 64-bit value in which only one bit is set. Mask value cannot be zero. The high 16 bits of the mask are reserved for definition by winmeta.xml. Defines custom enumerated types (maps) for use by this provider. Defines an enumeration value for use in this value map. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Defines a flag value for use in this bit map. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Defines a value for use in this pattern map. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Use templates to describe the payload logged by an event. Many events can share a template. Tags is a 28-bit user-defined metadata value applied to each event that uses this template. The event producer and consumer coordinate to define the semantics of the tags value. During event processing on Windows 10 Fall Creators Update (2017) or later, this value can be retrieved from the TRACE_EVENT_INFO Tags field. Defines the name and type of an event property (field). Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Tags is a 28-bit user-defined metadata value applied to this property. The event producer and consumer coordinate to define the semantics of the tags value. During event processing on Windows 10 Fall Creators Update (2017) or later, this value can be retrieved from the EVENT_PROPERTY_INFO Tags field. Defines the properties (fields) of an event structure. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Tags is a 28-bit user-defined metadata value applied to this property. The event producer and consumer coordinate to define the semantics of the tags value. During event processing on Windows 10 Fall Creators Update (2017) or later, this value can be retrieved from the EVENT_PROPERTY_INFO Tags field. Represents binary data in classic eventlog API Defines the events logged by this provider. Defines the event's value (ID), name, level, keywords, fields, etc. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Also referred to as the Event-Id. A manifest-based ETW event is uniquely identified by the {Provider-Guid,Event-Id,Event-Version} tuple. Non-localized event name. During event processing on Windows 10 Fall Creators Update (2017) or later, this value can be retrieved from the TRACE_EVENT_INFO EventNameOffset field. Non-localized event attributes. This should be a semicolon-delimited list of name=value attributes associated with the event. During event processing on Windows 10 Fall Creators Update (2017) or later, this value can be retrieved from the TRACE_EVENT_INFO EventAttributesOffset field. Defined attributes include: FILE=Filename of source code associated with event; LINE=Line number of source code associated with event; FUNC=Function name associated with event; MJ=Major component associated with event (component name); MN=Minor component associated with event (subcomponent name). Values containing semicolons or double-quotes should be quoted using double-quotes; double-quotes within the value should be doubled. Example: attributes='FILE=source.cpp;LINE=123;MJ="Value; ""Quoted"""' Note that most of these attributes are intended for use with tool-generated manifests and may not be appropriate for use with hand-maintained manifests. For example, the FILE ane LINE attributes are not generally appropriate for use in a hand-maintained manifest, since a single event might be emitted from multiple source code locations and the source code locations will change over time. The FILE and LINE attributes are intended for use in cases where the manifest is regenerated (with a new GUID) by a code generation tool each time the source code changes. Reference to the name of a predefined level (from winmeta.xml) or the name of a custom level (defined in the <levels> section). If not specified, the event's level will default to "LogAlways". Event level is a primary filtering attribute. All events should be assigned a meaningful level (win:Critical, win:Error, win:Warning, win:Informational, or win:Verbose) to support effective filtering during event collection. Reference to the name of a custom level defined in the <keywords> section. If not specified, the event will have no keywords set and will bypass most keyword-based event filtering. Event keyword is a primary filtering attribute. All events should be assigned at least one meaningful keyword to support effective filtering during event collection. Increment the version of an event if its template is modified. Use this to indicate that this event has been removed and will not be logged by this version of the provider. The description of the event should be retained in this manifest so that if an etl file collected from an older version of the provider on a different machine is brought to this machine, it can be correctly decoded on this machine. Use this to indicate that the template associated with this event contains valid WinRT types i.e. the event payload fields can come from arguments of projected WinRT methods. This attribute will be used if generating code for WinRT projection APIs. Defines a set of custom filters for use in this provider. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Defines a custom filter for use in this provider. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Specifies values for this provider's provider traits. The provider traits consist of a small binary blob that is registered with the ETW runtime via EventSetInformation and included with each call to EventWrite. The traits blob contains information about a provider's name, decode GUID, and group GUID. When provider traits are needed (i.e. when the provider has different values for its control GUID and its decode GUID or when the traits element is present), the MC tool's -um or -km codegen will generate a provider traits blob, will generate code to automatically register the blob as part of EventRegister, and will include the blob in each call to EventWrite. Optional. Default is false. If true, the provider's name will be included in the provider traits. If false, the provider's name will be left blank to reduce the size of the trace file. Including the provider name makes it possible to filter an event by provider name. Optional. Specifies that this provider is a member of the specified provider group. By default, the provider is not a member of any provider group. Decimal or hexadecimal message ID. Decimal should have no leading 0s. Hexadecimal requires '0x' prefix. Deprecated. Specifies an alias for this string table entry. Contains one or more resource tables, each of which contains resources for a single locale. This attribute is not used. Contains resources for a single locale. Specify the locale of the resources using a Windows locale name, e.g. "en-US". Locale name syntax is documented in MSDN topics such as "locale names" and "LocaleNameToLCID". Localized values of strings referenced in MESSAGETABLE strings and ETW providers. Defines the localized value of a string referenced by an event or a message table in this manifest. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. The stringTableId of the string reference in the ETW provider or the MESSAGETABLE string. For example, if a string is referenced as "$(string.MyString1)" then the id would be "MyString1". The localized string. Not used by Windows or mc.exe. This attribute can be used to describe the usage of the string to aid in tracking and localization. Used only by the Microsoft-provided WinMeta.xml file. WinMeta.xml uses this element to document ETW facilities that are built into the Windows operating system or are commonly used by ETW decoding tools. This includes the definitions of the property types supported by TDH APIs as well as Microsoft-defined constants for well-known event levels, opcodes, and channels. Declares an outType supported by Windows. An outType is a sub-type that extends the inType with additional semantics and presentation details for a property of an ETW event. For example, a property could have inType "AnsiString" (indicating nul-terminated CHAR8 string) and outType "Utf8" (indicating UTF-8 character encoding). Declares an inType supported by Windows. An inType is the type of a property of an ETW event. Every ETW event property declares an inType. The inType fully defines the mechanism for determining the size of a property and also gives a general idea of how the property's value should be interpreted. For example, an inType "Int16" indicates the size is 2 and the property should be interpreted as a signed 16-bit integer. Each inType has a set of outTypes that are supported for use with it. The outType adds semantics or presentation details to the inType. For example, the inType "UInt16" can be used with outType "Port" to indicate that an event property is a big-endian 16-bit Internet protocol port number. Each inType specifies one outType as "default", indicating the behavior that should be used when an ETW property uses the inType but does not specify an outType. Declares that Windows supports the use of the specified outType with this inType. Note that only the attributes of this element are significant. The text content of this element is not used by mc.exe. Deprecated. Specifies an alias for this string table entry. A globally unique identifier in Registry format, e.g. {12345678-4321-ABCD-1234-9ABCDEF012345678}. Use GUIDGen.exe or UUIDGen.exe to create a GUID. Symbol is used for code-generation. It should be a valid C Symbol or an empty string. Is used for code-generation on namespaces which should be valid C++ symbols. E.g. Namespace1._Namespace2.Namespace2 1-2 hexadecimal digits with '0x' prefix. 1-4 hexadecimal digits with '0x' prefix. 1-8 hexadecimal digits with '0x' prefix. 1-16 hexadecimal digits with '0x' prefix. 8-bit unsigned decimal or hexadecimal integer. Decimal should have no leading 0s. Hexadecimal requires '0x' prefix. 16-bit unsigned decimal or hexadecimal integer. Decimal should have no leading 0s. Hexadecimal requires '0x' prefix. 32-bit unsigned decimal or hexadecimal integer. Decimal should have no leading 0s. Hexadecimal requires '0x' prefix. 64-bit unsigned decimal or hexadecimal integer. Decimal should have no leading 0s. Hexadecimal requires '0x' prefix. For a constant-Length property, specify the value (decimal). For a variable-Length property, specify the name of the property that will have the length of this property. Length is required for "Binary" properties. It indicates the size (in bytes) of the property value. Length is optional for "UnicodeString" and "AnsiString" properties. If present, Length indicates the size (in characters) of the property value. If Length is not present, the property is assumed to be nul-terminated. Length is not used for other inTypes. Other inTypes either use a well-known constant size (e.g. Int32 length is 4) or encode the size within the value (e.g. nul-terminated strings end at the first 0 character, and "counted" values start with a 16-bit size). In the case of an array (i.e. when the property has a Count), the same Length value applies to all elements of the array. As a result, it is not generally useful to create an array of variable-Length properties. Note that some decoders only recognize Length properties that immediately precede the corresponding variable-Length property. For constant-Count array, specify the value (decimal). For variable-Count array, specify the name of the property that will have the count of this property. Note that some decoders will treat Count="0" as an error, and some decoders will treat Count="1" as non-array. Note that some decoders only recognize Count properties that immediately precede the corresponding variable-Count property. A reference to a localized string value provided elsewhere. The value of this attribute should be of the form "$(string.stringTableId)", where stringTableId is the "id" attribute of a <string> element defined in the <stringTable> section, or of the form "$(mc.mcSymbolId)", where mcSymbolId is the symbol of a message string defined in an .mc file compiled along with this manifest. A fully-qualified path to a file. Standard Windows environment variables are allowed. Typically, the file is of type .exe, .dll, or .sys. Space-separated list of keywords. To support consistent event filtering, all events should have at least one keyword assigned. F0:s *Dw= F//**********************************************************************` //* This is an include file generated by Message Compiler. *` //* *` //* Copyright (c) Microsoft Corporation. All Rights Reserved. *` //**********************************************************************` #pragma once //***************************************************************************** // // Notes on the ETW event code generated by MC: // // - Structures and arrays of structures are treated as an opaque binary blob. // The caller is responsible for packing the data for the structure into a // single region of memory, with no padding between values. The macro will // have an extra parameter for the length of the blob. // - Arrays of nul-terminated strings must be packed by the caller into a // single binary blob containing the correct number of strings, with a nul // after each string. The size of the blob is specified in characters, and // includes the final nul. // - Arrays of SID are treated as a single binary blob. The caller is // responsible for packing the SID values into a single region of memory with // no padding. // - The length attribute on the data element in the manifest is significant // for values with intype win:UnicodeString, win:AnsiString, or win:Binary. // The length attribute must be specified for win:Binary, and is optional for // win:UnicodeString and win:AnsiString (if no length is given, the strings // are assumed to be nul-terminated). For win:UnicodeString, the length is // measured in characters, not bytes. // - For an array of win:UnicodeString, win:AnsiString, or win:Binary, the // length attribute applies to every value in the array, so every value in // the array must have the same length. The values in the array are provided // to the macro via a single pointer -- the caller is responsible for packing // all of the values into a single region of memory with no padding between // values. // - Values of type win:CountedUnicodeString, win:CountedAnsiString, and // win:CountedBinary can be generated and collected on Vista or later. // However, they may not decode properly without the Windows 10 2018 Fall // Update. // - Arrays of type win:CountedUnicodeString, win:CountedAnsiString, and // win:CountedBinary must be packed by the caller into a single region of // memory. The format for each item is a UINT16 byte-count followed by that // many bytes of data. When providing the array to the generated macro, you // must provide the total size of the packed array data, including the UINT16 // sizes for each item. In the case of win:CountedUnicodeString, the data // size is specified in WCHAR (16-bit) units. In the case of // win:CountedAnsiString and win:CountedBinary, the data size is specified in // bytes. // //***************************************************************************** // // MCGEN_DISABLE_PROVIDER_CODE_GENERATION macro: // Define this macro to have the compiler skip the generated functions in this // header. // #ifndef MCGEN_DISABLE_PROVIDER_CODE_GENERATION #endif // MCGEN_DISABLE_PROVIDER_CODE_GENERATION // // MCGEN_EVENT_ENABLED macro: // Override to control how the EventWrite[EventName] macros determine whether // an event is enabled. The default behavior is for EventWrite[EventName] to // use the EventEnabled[EventName] macros. // #ifndef MCGEN_EVENT_ENABLED #define MCGEN_EVENT_ENABLED(EventName) EventEnabled##EventName() #endif // // MCGEN_EVENT_ENABLED_FORCONTEXT macro: // Override to control how the EventWrite[EventName]_ForContext macros // determine whether an event is enabled. The default behavior is for // EventWrite[EventName]_ForContext to use the // EventEnabled[EventName]_ForContext macros. // #ifndef MCGEN_EVENT_ENABLED_FORCONTEXT #define MCGEN_EVENT_ENABLED_FORCONTEXT(pContext, EventName) EventEnabled##EventName##_ForContext(pContext) #endif #if !defined(MCGEN_TRACE_CONTEXT_DEF) #define MCGEN_TRACE_CONTEXT_DEF // This structure is for use by MC-generated code and should not be used directly. typedef struct _MCGEN_TRACE_CONTEXT { TRACEHANDLE RegistrationHandle; TRACEHANDLE Logger; // Used as pointer to provider traits. ULONGLONG MatchAnyKeyword; ULONGLONG MatchAllKeyword; ULONG Flags; ULONG IsEnabled; UCHAR Level; UCHAR Reserve; USHORT EnableBitsCount; PULONG EnableBitMask; const ULONGLONG* EnableKeyWords; const UCHAR* EnableLevel; } MCGEN_TRACE_CONTEXT, *PMCGEN_TRACE_CONTEXT; #endif // MCGEN_TRACE_CONTEXT_DEF #if !defined(MCGEN_LEVEL_KEYWORD_ENABLED_DEF) #define MCGEN_LEVEL_KEYWORD_ENABLED_DEF // // Determines whether an event with a given Level and Keyword would be // considered as enabled based on the state of the specified context. // Note that you may want to use MCGEN_ENABLE_CHECK instead of calling this // function directly. // FORCEINLINE BOOLEAN McGenLevelKeywordEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ UCHAR Level, _In_ ULONGLONG Keyword ) { // // Check if the event Level is lower than the level at which // the channel is enabled. // If the event Level is 0 or the channel is enabled at level 0, // all levels are enabled. // if ((Level <= EnableInfo->Level) || // This also covers the case of Level == 0. (EnableInfo->Level == 0)) { // // Check if Keyword is enabled // if ((Keyword == (ULONGLONG)0) || ((Keyword & EnableInfo->MatchAnyKeyword) && ((Keyword & EnableInfo->MatchAllKeyword) == EnableInfo->MatchAllKeyword))) { return TRUE; } } return FALSE; } #endif // MCGEN_LEVEL_KEYWORD_ENABLED_DEF #if !defined(MCGEN_EVENT_ENABLED_DEF) #define MCGEN_EVENT_ENABLED_DEF // // Determines whether the specified event would be considered as enabled based // on the state of the specified context. Note that you may want to use // MCGEN_ENABLE_CHECK instead of calling this function directly. // FORCEINLINE BOOLEAN McGenEventEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ PCEVENT_DESCRIPTOR EventDescriptor ) { return McGenLevelKeywordEnabled(EnableInfo, EventDescriptor->Level, EventDescriptor->Keyword); } #endif // MCGEN_EVENT_ENABLED_DEF // // MCGEN_USE_KERNEL_MODE_APIS macro: // Controls whether the generated code uses kernel-mode or user-mode APIs. // - Set to 0 to use Windows user-mode APIs such as EventRegister. // - Set to 1 to use Windows kernel-mode APIs such as EtwRegister. // Default is based on whether the _ETW_KM_ macro is defined (i.e. by wdm.h). // Note that the APIs can also be overridden directly, e.g. by setting the // MCGEN_EVENTWRITETRANSFER or MCGEN_EVENTREGISTER macros. // #ifndef MCGEN_USE_KERNEL_MODE_APIS #ifdef _ETW_KM_ #define MCGEN_USE_KERNEL_MODE_APIS 1 #else #define MCGEN_USE_KERNEL_MODE_APIS 0 #endif #endif // MCGEN_USE_KERNEL_MODE_APIS // // MCGEN_HAVE_EVENTSETINFORMATION macro: // Controls how McGenEventSetInformation uses the EventSetInformation API. // - Set to 0 to disable the use of EventSetInformation // (McGenEventSetInformation will always return an error). // - Set to 1 to directly invoke MCGEN_EVENTSETINFORMATION. // - Set to 2 to to locate EventSetInformation at runtime via GetProcAddress // (user-mode) or MmGetSystemRoutineAddress (kernel-mode). // Default is determined as follows: // - If MCGEN_EVENTSETINFORMATION has been customized, set to 1 // (i.e. use MCGEN_EVENTSETINFORMATION). // - Else if the target OS version has EventSetInformation, set to 1 // (i.e. use MCGEN_EVENTSETINFORMATION). // - Else set to 2 (i.e. try to dynamically locate EventSetInformation). // Note that an McGenEventSetInformation function will only be generated if one // or more provider in a manifest has provider traits. // #ifndef MCGEN_HAVE_EVENTSETINFORMATION #ifdef MCGEN_EVENTSETINFORMATION // if MCGEN_EVENTSETINFORMATION has been customized, #define MCGEN_HAVE_EVENTSETINFORMATION 1 // directly invoke MCGEN_EVENTSETINFORMATION(...). #elif MCGEN_USE_KERNEL_MODE_APIS // else if using kernel-mode APIs, #if NTDDI_VERSION >= 0x06040000 // if target OS is Windows 10 or later, #define MCGEN_HAVE_EVENTSETINFORMATION 1 // directly invoke MCGEN_EVENTSETINFORMATION(...). #else // else #define MCGEN_HAVE_EVENTSETINFORMATION 2 // find "EtwSetInformation" via MmGetSystemRoutineAddress. #endif // else (using user-mode APIs) #else // if target OS and SDK is Windows 8 or later, #if WINVER >= 0x0602 && defined(EVENT_FILTER_TYPE_SCHEMATIZED) #define MCGEN_HAVE_EVENTSETINFORMATION 1 // directly invoke MCGEN_EVENTSETINFORMATION(...). #else // else #define MCGEN_HAVE_EVENTSETINFORMATION 2 // find "EventSetInformation" via GetModuleHandleExW/GetProcAddress. #endif #endif #endif // MCGEN_HAVE_EVENTSETINFORMATION // // MCGEN Override Macros // // The following override macros may be defined before including this header // to control the APIs used by this header: // // - MCGEN_EVENTREGISTER // - MCGEN_EVENTUNREGISTER // - MCGEN_EVENTSETINFORMATION // - MCGEN_EVENTWRITETRANSFER // // If the the macro is undefined, the MC implementation will default to the // corresponding ETW APIs. For example, if the MCGEN_EVENTREGISTER macro is // undefined, the EventRegister[MyProviderName] macro will use EventRegister // in user mode and will use EtwRegister in kernel mode. // // To prevent issues from conflicting definitions of these macros, the value // of the override macro will be used as a suffix in certain internal function // names. Because of this, the override macros must follow certain rules: // // - The macro must be defined before any MC-generated header is included and // must not be undefined or redefined after any MC-generated header is // included. Different translation units (i.e. different .c or .cpp files) // may set the macros to different values, but within a translation unit // (within a single .c or .cpp file), the macro must be set once and not // changed. // - The override must be an object-like macro, not a function-like macro // (i.e. the override macro must not have a parameter list). // - The override macro's value must be a simple identifier, i.e. must be // something that starts with a letter or '_' and contains only letters, // numbers, and '_' characters. // - If the override macro's value is the name of a second object-like macro, // the second object-like macro must follow the same rules. (The override // macro's value can also be the name of a function-like macro, in which // case the function-like macro does not need to follow the same rules.) // // For example, the following will cause compile errors: // // #define MCGEN_EVENTWRITETRANSFER MyNamespace::MyClass::MyFunction // Value has non-identifier characters (colon). // #define MCGEN_EVENTWRITETRANSFER GetEventWriteFunctionPointer(7) // Value has non-identifier characters (parentheses). // #define MCGEN_EVENTWRITETRANSFER(h,e,a,r,c,d) EventWrite(h,e,c,d) // Override is defined as a function-like macro. // #define MY_OBJECT_LIKE_MACRO MyNamespace::MyClass::MyEventWriteFunction // #define MCGEN_EVENTWRITETRANSFER MY_OBJECT_LIKE_MACRO // Evaluates to something with non-identifier characters (colon). // // The following would be ok: // // #define MCGEN_EVENTWRITETRANSFER MyEventWriteFunction1 // OK, suffix will be "MyEventWriteFunction1". // #define MY_OBJECT_LIKE_MACRO MyEventWriteFunction2 // #define MCGEN_EVENTWRITETRANSFER MY_OBJECT_LIKE_MACRO // OK, suffix will be "MyEventWriteFunction2". // #define MY_FUNCTION_LIKE_MACRO(h,e,a,r,c,d) MyNamespace::MyClass::MyEventWriteFunction3(h,e,c,d) // #define MCGEN_EVENTWRITETRANSFER MY_FUNCTION_LIKE_MACRO // OK, suffix will be "MY_FUNCTION_LIKE_MACRO". // #ifndef MCGEN_EVENTREGISTER #if MCGEN_USE_KERNEL_MODE_APIS #define MCGEN_EVENTREGISTER EtwRegister #else #define MCGEN_EVENTREGISTER EventRegister #endif #endif // MCGEN_EVENTREGISTER #ifndef MCGEN_EVENTUNREGISTER #if MCGEN_USE_KERNEL_MODE_APIS #define MCGEN_EVENTUNREGISTER EtwUnregister #else #define MCGEN_EVENTUNREGISTER EventUnregister #endif #endif // MCGEN_EVENTUNREGISTER #ifndef MCGEN_EVENTSETINFORMATION #if MCGEN_USE_KERNEL_MODE_APIS #define MCGEN_EVENTSETINFORMATION EtwSetInformation #else #define MCGEN_EVENTSETINFORMATION EventSetInformation #endif #endif // MCGEN_EVENTSETINFORMATION #ifndef MCGEN_EVENTWRITETRANSFER #if MCGEN_USE_KERNEL_MODE_APIS #define MCGEN_EVENTWRITETRANSFER EtwWriteTransfer #else #define MCGEN_EVENTWRITETRANSFER EventWriteTransfer #endif #endif // MCGEN_EVENTWRITETRANSFER #ifndef _mcgen_EVENT_BIT_SET #if defined(_M_IX86) || defined(_M_X64) // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_EVENT_BIT_SET(EnableBits, BitPosition) ((((const unsigned char*)EnableBits)[BitPosition >> 3] & (1u << (BitPosition & 7))) != 0) #else // CPU type // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_EVENT_BIT_SET(EnableBits, BitPosition) ((EnableBits[BitPosition >> 5] & (1u << (BitPosition & 31))) != 0) #endif // CPU type #endif // _mcgen_EVENT_BIT_SET // This function is for use by MC-generated code and should not be used directly. DECLSPEC_NOINLINE __inline VOID __stdcall McGenControlCallbackV2( _In_ LPCGUID SourceId, _In_ ULONG ControlCode, _In_ UCHAR Level, _In_ ULONGLONG MatchAnyKeyword, _In_ ULONGLONG MatchAllKeyword, _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData, _Inout_opt_ PVOID CallbackContext ) /*++ Routine Description: This is the notification callback for Windows Vista and later. Arguments: SourceId - The GUID that identifies the session that enabled the provider. ControlCode - The parameter indicates whether the provider is being enabled or disabled. Level - The level at which the event is enabled. MatchAnyKeyword - The bitmask of keywords that the provider uses to determine the category of events that it writes. MatchAllKeyword - This bitmask additionally restricts the category of events that the provider writes. FilterData - The provider-defined data. CallbackContext - The context of the callback that is defined when the provider called EtwRegister to register itself. Remarks: ETW calls this function to notify provider of enable/disable --*/ { PMCGEN_TRACE_CONTEXT Ctx = (PMCGEN_TRACE_CONTEXT)CallbackContext; ULONG Ix; #ifndef MCGEN_PRIVATE_ENABLE_CALLBACK_V2 UNREFERENCED_PARAMETER(SourceId); UNREFERENCED_PARAMETER(FilterData); #endif if (Ctx == NULL) { return; } switch (ControlCode) { case EVENT_CONTROL_CODE_ENABLE_PROVIDER: Ctx->Level = Level; Ctx->MatchAnyKeyword = MatchAnyKeyword; Ctx->MatchAllKeyword = MatchAllKeyword; Ctx->IsEnabled = EVENT_CONTROL_CODE_ENABLE_PROVIDER; for (Ix = 0; Ix < Ctx->EnableBitsCount; Ix += 1) { if (McGenLevelKeywordEnabled(Ctx, Ctx->EnableLevel[Ix], Ctx->EnableKeyWords[Ix]) != FALSE) { Ctx->EnableBitMask[Ix >> 5] |= (1 << (Ix % 32)); } else { Ctx->EnableBitMask[Ix >> 5] &= ~(1 << (Ix % 32)); } } break; case EVENT_CONTROL_CODE_DISABLE_PROVIDER: Ctx->IsEnabled = EVENT_CONTROL_CODE_DISABLE_PROVIDER; Ctx->Level = 0; Ctx->MatchAnyKeyword = 0; Ctx->MatchAllKeyword = 0; if (Ctx->EnableBitsCount > 0) { #pragma warning(suppress: 26451) // Arithmetic overflow cannot occur, no matter the value of EnableBitCount RtlZeroMemory(Ctx->EnableBitMask, (((Ctx->EnableBitsCount - 1) / 32) + 1) * sizeof(ULONG)); } break; default: break; } #ifdef MCGEN_PRIVATE_ENABLE_CALLBACK_V2 // // Call user defined callback // MCGEN_PRIVATE_ENABLE_CALLBACK_V2( SourceId, ControlCode, Level, MatchAnyKeyword, MatchAllKeyword, FilterData, CallbackContext ); #endif // MCGEN_PRIVATE_ENABLE_CALLBACK_V2 return; } #ifndef _mcgen_PENABLECALLBACK #if MCGEN_USE_KERNEL_MODE_APIS #define _mcgen_PENABLECALLBACK PETWENABLECALLBACK #else #define _mcgen_PENABLECALLBACK PENABLECALLBACK #endif #endif // _mcgen_PENABLECALLBACK #if !defined(_mcgen_PASTE2) // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_PASTE2(a, b) _mcgen_PASTE2_imp(a, b) #define _mcgen_PASTE2_imp(a, b) a##b #endif // _mcgen_PASTE2 #if !defined(_mcgen_PASTE3) // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_PASTE3(a, b, c) _mcgen_PASTE3_imp(a, b, c) #define _mcgen_PASTE3_imp(a, b, c) a##b##_##c #endif // _mcgen_PASTE3 // // Macro validation // // Validate MCGEN_EVENTREGISTER: // Trigger an error if MCGEN_EVENTREGISTER is not an unqualified (simple) identifier: struct _mcgen_PASTE2(MCGEN_EVENTREGISTER_definition_must_be_an_unqualified_identifier_, MCGEN_EVENTREGISTER); // Trigger an error if MCGEN_EVENTREGISTER is redefined: typedef struct _mcgen_PASTE2(MCGEN_EVENTREGISTER_definition_must_be_an_unqualified_identifier_, MCGEN_EVENTREGISTER) MCGEN_EVENTREGISTER_must_not_be_redefined_between_headers; // Trigger an error if MCGEN_EVENTREGISTER is defined as a function-like macro: typedef void MCGEN_EVENTREGISTER_must_not_be_a_functionLike_macro_MCGEN_EVENTREGISTER; typedef int _mcgen_PASTE2(MCGEN_EVENTREGISTER_must_not_be_a_functionLike_macro_, MCGEN_EVENTREGISTER); // Validate MCGEN_EVENTUNREGISTER: // Trigger an error if MCGEN_EVENTUNREGISTER is not an unqualified (simple) identifier: struct _mcgen_PASTE2(MCGEN_EVENTUNREGISTER_definition_must_be_an_unqualified_identifier_, MCGEN_EVENTUNREGISTER); // Trigger an error if MCGEN_EVENTUNREGISTER is redefined: typedef struct _mcgen_PASTE2(MCGEN_EVENTUNREGISTER_definition_must_be_an_unqualified_identifier_, MCGEN_EVENTUNREGISTER) MCGEN_EVENTUNREGISTER_must_not_be_redefined_between_headers; // Trigger an error if MCGEN_EVENTUNREGISTER is defined as a function-like macro: typedef void MCGEN_EVENTUNREGISTER_must_not_be_a_functionLike_macro_MCGEN_EVENTUNREGISTER; typedef int _mcgen_PASTE2(MCGEN_EVENTUNREGISTER_must_not_be_a_functionLike_macro_, MCGEN_EVENTUNREGISTER); // Validate MCGEN_EVENTSETINFORMATION: // Trigger an error if MCGEN_EVENTSETINFORMATION is not an unqualified (simple) identifier: struct _mcgen_PASTE2(MCGEN_EVENTSETINFORMATION_definition_must_be_an_unqualified_identifier_, MCGEN_EVENTSETINFORMATION); // Trigger an error if MCGEN_EVENTSETINFORMATION is redefined: typedef struct _mcgen_PASTE2(MCGEN_EVENTSETINFORMATION_definition_must_be_an_unqualified_identifier_, MCGEN_EVENTSETINFORMATION) MCGEN_EVENTSETINFORMATION_must_not_be_redefined_between_headers; // Trigger an error if MCGEN_EVENTSETINFORMATION is defined as a function-like macro: typedef void MCGEN_EVENTSETINFORMATION_must_not_be_a_functionLike_macro_MCGEN_EVENTSETINFORMATION; typedef int _mcgen_PASTE2(MCGEN_EVENTSETINFORMATION_must_not_be_a_functionLike_macro_, MCGEN_EVENTSETINFORMATION); // Validate MCGEN_EVENTWRITETRANSFER: // Trigger an error if MCGEN_EVENTWRITETRANSFER is not an unqualified (simple) identifier: struct _mcgen_PASTE2(MCGEN_EVENTWRITETRANSFER_definition_must_be_an_unqualified_identifier_, MCGEN_EVENTWRITETRANSFER); // Trigger an error if MCGEN_EVENTWRITETRANSFER is redefined: typedef struct _mcgen_PASTE2(MCGEN_EVENTWRITETRANSFER_definition_must_be_an_unqualified_identifier_, MCGEN_EVENTWRITETRANSFER) MCGEN_EVENTWRITETRANSFER_must_not_be_redefined_between_headers;; // Trigger an error if MCGEN_EVENTWRITETRANSFER is defined as a function-like macro: typedef void MCGEN_EVENTWRITETRANSFER_must_not_be_a_functionLike_macro_MCGEN_EVENTWRITETRANSFER; typedef int _mcgen_PASTE2(MCGEN_EVENTWRITETRANSFER_must_not_be_a_functionLike_macro_, MCGEN_EVENTWRITETRANSFER); #ifndef McGenEventWrite_def #define McGenEventWrite_def // This macro is for use by MC-generated code and should not be used directly. #define McGenEventWrite _mcgen_PASTE2(McGenEventWrite_, MCGEN_EVENTWRITETRANSFER) // This function is for use by MC-generated code and should not be used directly. DECLSPEC_NOINLINE __inline ULONG __stdcall McGenEventWrite( _In_ PMCGEN_TRACE_CONTEXT Context, _In_ PCEVENT_DESCRIPTOR Descriptor, _In_opt_ LPCGUID ActivityId, _In_range_(1, 128) ULONG EventDataCount, _Pre_cap_(EventDataCount) EVENT_DATA_DESCRIPTOR* EventData ) { const USHORT UNALIGNED* Traits; // Some customized MCGEN_EVENTWRITETRANSFER macros might ignore ActivityId. UNREFERENCED_PARAMETER(ActivityId); Traits = (const USHORT UNALIGNED*)(UINT_PTR)Context->Logger; if (Traits == NULL) { EventData[0].Ptr = 0; EventData[0].Size = 0; EventData[0].Reserved = 0; } else { EventData[0].Ptr = (ULONG_PTR)Traits; EventData[0].Size = *Traits; EventData[0].Reserved = 2; // EVENT_DATA_DESCRIPTOR_TYPE_PROVIDER_METADATA } return MCGEN_EVENTWRITETRANSFER( Context->RegistrationHandle, Descriptor, ActivityId, NULL, EventDataCount, EventData); } #endif // McGenEventWrite_def #ifndef McGenEventSetInformation_def #define McGenEventSetInformation_def #if MCGEN_HAVE_EVENTSETINFORMATION == 1 // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_EVENTSETINFORMATION_SUFFIX MCGEN_EVENTSETINFORMATION #elif MCGEN_HAVE_EVENTSETINFORMATION == 2 #if MCGEN_USE_KERNEL_MODE_APIS // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_EVENTSETINFORMATION_SUFFIX 2K #else // MCGEN_USE_KERNEL_MODE_APIS // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_EVENTSETINFORMATION_SUFFIX 2U #endif // MCGEN_USE_KERNEL_MODE_APIS #else // MCGEN_HAVE_EVENTSETINFORMATION == 0 // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_EVENTSETINFORMATION_SUFFIX 0 #endif // MCGEN_HAVE_EVENTSETINFORMATION // This macro is for use by MC-generated code and should not be used directly. #define McGenEventSetInformation _mcgen_PASTE2(McGenEventSetInformation_, _mcgen_EVENTSETINFORMATION_SUFFIX) // This function is for use by MC-generated code and should not be used directly. _IRQL_requires_max_(PASSIVE_LEVEL) DECLSPEC_NOINLINE __inline ULONG __stdcall McGenEventSetInformation( _In_ REGHANDLE RegHandle, _In_ EVENT_INFO_CLASS InformationClass, _In_opt_bytecount_(InformationLength) PVOID EventInformation, _In_ ULONG InformationLength ) /*++ Routine Description: This function invokes EventSetInformation to provide additional information to the ETW runtime. Note that the implementation of this function depends on the values of the MCGEN_HAVE_EVENTSETINFORMATION and MCGEN_EVENTSETINFORMATION macros. Depending on the values of these macros, this function may call EventSetInformation directly, may dynamically-load EventSetInformation via GetProcAddress, or may call a replacement function. Arguments: RegHandle - Registration handle returned by EventRegister. InformationClass - Type of operation to be performed on the registration object. EventInformation - The input buffer. InformationLength - Size of the input buffer. --*/ { ULONG Error; #if MCGEN_HAVE_EVENTSETINFORMATION == 1 #pragma warning(suppress: 6387) // It's ok for EventInformation to be null if InformationLength is 0. Error = MCGEN_EVENTSETINFORMATION( RegHandle, InformationClass, EventInformation, InformationLength); #elif MCGEN_HAVE_EVENTSETINFORMATION == 2 #if MCGEN_USE_KERNEL_MODE_APIS typedef NTSTATUS(NTAPI* PFEtwSetInformation)( _In_ REGHANDLE regHandle, _In_ EVENT_INFO_CLASS informationClass, _In_opt_bytecount_(informationLength) PVOID eventInformation, _In_ ULONG informationLength); static UNICODE_STRING strEtwSetInformation = { sizeof(L"EtwSetInformation") - 2, sizeof(L"EtwSetInformation") - 2, L"EtwSetInformation" }; PFEtwSetInformation pfEtwSetInformation; #pragma warning(push) #pragma warning(disable: 4055) // Allow the cast from a PVOID to a PFN pfEtwSetInformation = (PFEtwSetInformation)MmGetSystemRoutineAddress(&strEtwSetInformation); #pragma warning(pop) if (pfEtwSetInformation) { Error = pfEtwSetInformation( RegHandle, InformationClass, EventInformation, InformationLength); } else { Error = (ULONG)STATUS_NOT_SUPPORTED; } #else // !MCGEN_USE_KERNEL_MODE_APIS HMODULE hEventing; Error = ERROR_NOT_SUPPORTED; if (GetModuleHandleExW(0, L"api-ms-win-eventing-provider-l1-1-0", &hEventing) || GetModuleHandleExW(0, L"advapi32", &hEventing)) { typedef ULONG(WINAPI* PFEventSetInformation)( _In_ REGHANDLE regHandle, _In_ EVENT_INFO_CLASS informationClass, _In_opt_bytecount_(informationLength) PVOID eventInformation, _In_ ULONG informationLength); PFEventSetInformation pfEventSetInformation = (PFEventSetInformation)GetProcAddress(hEventing, "EventSetInformation"); if (pfEventSetInformation) { Error = pfEventSetInformation( RegHandle, InformationClass, EventInformation, InformationLength); } FreeLibrary(hEventing); } #endif // MCGEN_USE_KERNEL_MODE_APIS #else // MCGEN_HAVE_EVENTSETINFORMATION == 0 (void)RegHandle; (void)InformationClass; (void)EventInformation; (void)InformationLength; #if MCGEN_USE_KERNEL_MODE_APIS Error = (ULONG)STATUS_NOT_SUPPORTED; #else // !MCGEN_USE_KERNEL_MODE_APIS Error = ERROR_NOT_SUPPORTED; #endif // MCGEN_USE_KERNEL_MODE_APIS #endif // MCGEN_HAVE_EVENTSETINFORMATION return Error; } #endif // McGenEventSetInformation_def #ifndef McGenEventRegisterContext_def #define McGenEventRegisterContext_def // This macro is for use by MC-generated code and should not be used directly. #define McGenEventRegisterContext _mcgen_PASTE3(McGenEventRegisterContext_, MCGEN_EVENTREGISTER, _mcgen_EVENTSETINFORMATION_SUFFIX) #pragma warning(push) #pragma warning(disable:6103) // This function is for use by MC-generated code and should not be used directly. _IRQL_requires_max_(PASSIVE_LEVEL) DECLSPEC_NOINLINE __inline ULONG __stdcall McGenEventRegisterContext( _In_ LPCGUID ProviderId, _In_opt_ _mcgen_PENABLECALLBACK EnableCallback, _In_opt_ PVOID CallbackContext, _Inout_ MCGEN_TRACE_CONTEXT* Context ) /*++ Routine Description: This function registers the provider with ETW and registers provider traits. The EventRegister[ProviderName] macro will use this function instead of McGenEventRegister if the provider has traits to be registered. Arguments: ProviderId - Provider ID to register with ETW. EnableCallback - Callback to be used. CallbackContext - Context for the callback. Context - Provider context. Remarks: Should not be called if the provider is already registered (i.e. should not be called if Context->RegistrationHandle != 0). Repeatedly registering a provider is a bug and may indicate a race condition. --*/ { ULONG Error; if (Context->RegistrationHandle != 0) { #if MCGEN_USE_KERNEL_MODE_APIS Error = (ULONG)STATUS_INVALID_PARAMETER; #else Error = ERROR_INVALID_PARAMETER; #endif } else { Error = MCGEN_EVENTREGISTER( ProviderId, EnableCallback, CallbackContext, &Context->RegistrationHandle); if (Error == 0 && Context->Logger != 0) { (void)McGenEventSetInformation( Context->RegistrationHandle, (EVENT_INFO_CLASS)2, // EventProviderSetTraits (void*)(UINT_PTR)Context->Logger, *(USHORT const UNALIGNED*)(UINT_PTR)Context->Logger); } } return Error; } #pragma warning(pop) #endif // McGenEventRegisterContext_def // This macro is for use by MC-generated code and should not be used directly. #define McGenEventRegister _mcgen_PASTE2(McGenEventRegister_, MCGEN_EVENTREGISTER) #pragma warning(push) #pragma warning(disable:6103) // This function is for use by MC-generated code and should not be used directly. DECLSPEC_NOINLINE __inline ULONG __stdcall McGenEventRegister( _In_ LPCGUID ProviderId, _In_opt_ _mcgen_PENABLECALLBACK EnableCallback, _In_opt_ PVOID CallbackContext, _Inout_ PREGHANDLE RegHandle ) /*++ Routine Description: This function registers the provider with ETW. Arguments: ProviderId - Provider ID to register with ETW. EnableCallback - Callback to be used. CallbackContext - Context for the callback. RegHandle - Pointer to registration handle. Remarks: Should not be called if the provider is already registered (i.e. should not be called if *RegHandle != 0). Repeatedly registering a provider is a bug and may indicate a race condition. However, for compatibility with previous behavior, this function will return SUCCESS in this case. --*/ { ULONG Error; if (*RegHandle != 0) { Error = 0; // ERROR_SUCCESS } else { Error = MCGEN_EVENTREGISTER(ProviderId, EnableCallback, CallbackContext, RegHandle); } return Error; } #pragma warning(pop) // This macro is for use by MC-generated code and should not be used directly. #define McGenEventUnregister _mcgen_PASTE2(McGenEventUnregister_, MCGEN_EVENTUNREGISTER) // This function is for use by MC-generated code and should not be used directly. DECLSPEC_NOINLINE __inline ULONG __stdcall McGenEventUnregister(_Inout_ PREGHANDLE RegHandle) /*++ Routine Description: Unregister from ETW and set *RegHandle = 0. Arguments: RegHandle - the pointer to the provider registration handle Remarks: If provider has not been registered (i.e. if *RegHandle == 0), return SUCCESS. It is safe to call McGenEventUnregister even if the call to McGenEventRegister returned an error. --*/ { ULONG Error; if(*RegHandle == 0) { Error = 0; // ERROR_SUCCESS } else { Error = MCGEN_EVENTUNREGISTER(*RegHandle); *RegHandle = (REGHANDLE)0; } return Error; } typedef LONG (__stdcall *PFN_WMIENTRY_CALLBACK)( _In_ UCHAR MinorFunction, _In_opt_ PVOID DataPath, _In_ ULONG BufferLength, _Inout_updates_bytes_(BufferLength) PVOID Buffer, _In_ PVOID Context, _Out_ PULONG Size ); // This function is for use by MC-generated code and should not be used directly. NTSTATUS __stdcall McGenEventTracingRegister( _In_ LPCGUID ProviderId, _In_opt_ PETWENABLECALLBACK EnableCallback, _In_opt_ PVOID CallbackContext, _Inout_ PREGHANDLE RegHandle ); // This function is for use by MC-generated code and should not be used directly. NTSTATUS __stdcall McGenControlCallback( _In_ UCHAR MinorFunction, _In_opt_ PVOID DataPath, _In_ ULONG BufferLength, _Inout_updates_bytes_(BufferLength) PVOID Buffer, _In_ PVOID Context, _Out_ PULONG Size ); // This function is for use by MC-generated code and should not be used directly. VOID __stdcall McGenControlCallbackV2( _In_ LPCGUID SourceId, _In_ ULONG ControlCode, _In_ UCHAR Level, _In_ ULONGLONG MatchAnyKeyword, _In_ ULONGLONG MatchAllKeyword, _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData, _Inout_opt_ PVOID CallbackContext ); typedef ULONG (__stdcall *PFN_ETW_WRITE)( _In_ REGHANDLE RegHandle, _In_ PCEVENT_DESCRIPTOR EventDescriptor, _In_opt_ LPCGUID ActivityId, _In_ ULONG UserDataCount, _In_reads_opt_(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData ); typedef NTSTATUS (__stdcall *PFN_ETW_REGISTER)( _In_ LPCGUID ProviderId, _In_opt_ PETWENABLECALLBACK EnableCallback, _In_opt_ PVOID CallbackContext, _Out_ PREGHANDLE RegHandle ); typedef NTSTATUS (__stdcall *PFN_ETW_UNREGISTER)( _In_ REGHANDLE RegHandle ); typedef BOOLEAN NTKERNELAPI (__stdcall FN_PS_GETVERSION)( _Out_opt_ PULONG MajorVersion, _Out_opt_ PULONG MinorVersion, _Out_opt_ PULONG BuildNumber, _Out_opt_ PUNICODE_STRING CSDVersion ); typedef FN_PS_GETVERSION *PFN_PS_GETVERSION; #define WMIREG_FLAG_CALLBACK 0x80000000 // not exposed in DDK #ifndef WMIREG_FLAG_TRACE_PROVIDER #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000 #endif // This structure is for use by MC-generated code and should not be used directly. typedef struct _MCGEN_TRACE_CONTEXT { #pragma prefast(suppress:__WARNING_ENCODE_GLOBAL_FUNCTION_POINTER, "this pointer can not be encoded"); PFN_WMIENTRY_CALLBACK Callback; TRACEHANDLE Logger; TRACEHANDLE RegistrationHandle; ULONGLONG MatchAnyKeyword; ULONGLONG MatchAllKeyword; LPCGUID ControlGuid; #pragma prefast(suppress:__WARNING_ENCODE_GLOBAL_FUNCTION_POINTER, "this pointer can not be encoded"); PFN_ETW_WRITE PfnEtwWrite; #pragma prefast(suppress:__WARNING_ENCODE_GLOBAL_FUNCTION_POINTER, "this pointer can not be encoded"); PFN_ETW_REGISTER PfnEtwRegister; #pragma prefast(suppress:__WARNING_ENCODE_GLOBAL_FUNCTION_POINTER, "this pointer can not be encoded"); PFN_ETW_UNREGISTER PfnEtwUnregister; #pragma prefast(suppress:__WARNING_ENCODE_GLOBAL_FUNCTION_POINTER, "this pointer can not be encoded"); PFN_PS_GETVERSION pfnPsGetVersion; ULONG Flags; ULONG IsEnabled; UCHAR Level; BOOLEAN McGenPreVista; BOOLEAN McGenTracingSupportInit; USHORT EnableBitsCount; PULONG EnableBitMask; const ULONGLONG* EnableKeyWords; const UCHAR* EnableLevel; } MCGEN_TRACE_CONTEXT, *PMCGEN_TRACE_CONTEXT; BOOLEAN __stdcall McGenEventTracingEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ PCEVENT_DESCRIPTOR EventDescriptor ); BOOLEAN __stdcall McGenLevelKeywordEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ UCHAR Level, _In_ ULONGLONG Keyword ); // This function is for use by MC-generated code and should not be used directly. NTSTATUS __stdcall McGenEventTracingUnregister(_Inout_ PMCGEN_TRACE_CONTEXT Context); // This function is for use by MC-generated code and should not be used directly. NTSTATUS McGenInitTracingSupport( _In_ PMCGEN_TRACE_CONTEXT Context ); #ifdef ALLOC_PRAGMA #pragma alloc_text( PAGE, McGenEventTracingRegister) #pragma alloc_text( PAGE, McGenEventTracingUnregister) #pragma alloc_text( PAGE, McGenControlCallback) #pragma alloc_text( PAGE, McGenInitTracingSupport) #endif // ALLOC_PRAGMA FORCEINLINE BOOLEAN __stdcall McGenEventTracingEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ PCEVENT_DESCRIPTOR EventDescriptor ) { return McGenLevelKeywordEnabled(EnableInfo, EventDescriptor->Level, EventDescriptor->Keyword); } FORCEINLINE BOOLEAN __stdcall McGenLevelKeywordEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ UCHAR Level, _In_ ULONGLONG Keyword ) { if(!EnableInfo){ return FALSE; } if (EnableInfo->McGenPreVista) { return ( ((Level <= EnableInfo->Level) || (Level == 0)) && (((ULONG)(Keyword & 0xFFFFFFFF) == 0) || ((ULONG)(Keyword & 0xFFFFFFFF) & EnableInfo->Flags))); } // // Check if the event Level is lower than the level at which // the channel is enabled. // If the event Level is 0 or the channel is enabled at level 0, // all levels are enabled. // if ((Level <= EnableInfo->Level) || // This also covers the case of Level == 0. (EnableInfo->Level == 0)) { // // Check if Keyword is enabled // if ((Keyword == (ULONGLONG)0) || ((Keyword & EnableInfo->MatchAnyKeyword) && ((Keyword & EnableInfo->MatchAllKeyword) == EnableInfo->MatchAllKeyword))) { return TRUE; } } return FALSE; } // This function is for use by MC-generated code and should not be used directly. DECLSPEC_NOINLINE __inline NTSTATUS __stdcall McGenControlCallback( _In_ UCHAR MinorFunction, _In_opt_ PVOID DataPath, _In_ ULONG BufferLength, _Inout_updates_bytes_(BufferLength) PVOID Buffer, _In_ PVOID Context, _Out_ PULONG Size ) /*++ Routine Description: Called by WMI for registration/unregistration or enabled/disabled. Arguments: MinorFunction - specifies the type of callback (register, event enable/disable) DataPath - varies depending on the ActionCode BufferLength - size of the Buffer parameter Buffer - in/out buffer where we read from or write to depending on the type of callback Context - the pointer private struct MCGEN_TRACE_CONTEXT Size - output parameter to receive the amount of data written into Buffer Return Value: NTSTATUS code indicating success/failure Comments: If return value is STATUS_BUFFER_TOO_SMALL and BufferLength >= 4, then first ulong of buffer contains required size. Supports XP and W2K3, no W2K support. --*/ { PMCGEN_TRACE_CONTEXT Ctx; NTSTATUS Status = STATUS_SUCCESS; UNREFERENCED_PARAMETER(DataPath); PAGED_CODE(); McGenDebug(0,("McGenControlCallback 0x%08X %p\n", MinorFunction, Context)); *Size = 0; // // Get the context // Ctx = (PMCGEN_TRACE_CONTEXT)Context; switch (MinorFunction) { case IRP_MN_REGINFO: { PWMIREGINFOW WmiRegInfo; ULONG BufferNeeded; WmiRegInfo = (PWMIREGINFO)Buffer; // // Calculate buffer size need to hold all info. // BufferNeeded = FIELD_OFFSET(WMIREGINFOW, WmiRegGuid) + sizeof(WMIREGGUIDW); // // If the provided buffer is large enough, then fill with info. // if (BufferNeeded <= BufferLength) { RtlZeroMemory(Buffer, BufferLength); // // Fill in the WMIREGINFO // WmiRegInfo->BufferSize = BufferNeeded; WmiRegInfo->RegistryPath = 0; WmiRegInfo->GuidCount = 1; // // Fill in the WMIREGGUID // WmiRegInfo->WmiRegGuid[0].Guid = *Ctx->ControlGuid; WmiRegInfo->WmiRegGuid[0].Flags = WMIREG_FLAG_TRACE_CONTROL_GUID | WMIREG_FLAG_TRACED_GUID; McGenDebug(0,("Control GUID::%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n", Ctx->ControlGuid->Data1, Ctx->ControlGuid->Data2, Ctx->ControlGuid->Data3, Ctx->ControlGuid->Data4[0], Ctx->ControlGuid->Data4[1], Ctx->ControlGuid->Data4[2], Ctx->ControlGuid->Data4[3], Ctx->ControlGuid->Data4[4], Ctx->ControlGuid->Data4[5], Ctx->ControlGuid->Data4[6], Ctx->ControlGuid->Data4[7] )); Status = STATUS_SUCCESS; *Size = BufferNeeded; } else { Status = STATUS_BUFFER_TOO_SMALL; if (BufferLength >= sizeof(ULONG)) { *((PULONG)Buffer) = BufferNeeded; *Size = sizeof(ULONG); } } break; } case IRP_MN_ENABLE_EVENTS: case IRP_MN_DISABLE_EVENTS: { PWNODE_HEADER Wnode; ULONG Level; ULONG ReturnLength; ULONG Ix; if (Context == NULL) { Status = STATUS_WMI_GUID_NOT_FOUND; break; } if (BufferLength < sizeof(WNODE_HEADER)) { Status = STATUS_INVALID_PARAMETER; break; } // // Initialize locals // Wnode = (PWNODE_HEADER)Buffer; // // Do the requested event action // if (MinorFunction == IRP_MN_DISABLE_EVENTS) { McGenDebug(0,("McGenControlCallback: DISABLE_EVENTS\n")); Ctx->IsEnabled = 0; Ctx->Level = 0; Ctx->Flags = 0; Ctx->Logger = 0; if (Ctx->EnableBitsCount > 0) { RtlZeroMemory(Ctx->EnableBitMask, (((Ctx->EnableBitsCount - 1) / 32) + 1) * sizeof(ULONG)); } } else { Ctx->Logger = (TRACEHANDLE)( Wnode->HistoricalContext); Status = WmiQueryTraceInformation(TraceEnableLevelClass, &Level, sizeof(Level), &ReturnLength, (PVOID) Wnode ); if (Status == STATUS_SUCCESS) { Ctx->Level = (UCHAR)Level; } Status = WmiQueryTraceInformation(TraceEnableFlagsClass, &Ctx->Flags, sizeof(Ctx->Flags), &ReturnLength, (PVOID) Wnode ); Ctx->IsEnabled = 1; for (Ix = 0; Ix < Ctx->EnableBitsCount; Ix += 1) { if (McGenLevelKeywordEnabled(Ctx, Ctx->EnableLevel[Ix], Ctx->EnableKeyWords[Ix]) != FALSE) { Ctx->EnableBitMask[Ix >> 5] |= (1 << (Ix % 32)); } else { Ctx->EnableBitMask[Ix >> 5] &= ~(1 << (Ix % 32)); } } McGenDebug(0,("McGenControlCallback: ENABLE_EVENTS " "LoggerId %d, Flags 0x%08X, Level 0x%02X\n", (USHORT) Ctx->Logger, Ctx->Flags, Ctx->Level)); } #ifdef MCGEN_PRIVATE_ENABLE_CALLBACK // // Notify changes to flags, level for GUID // MCGEN_PRIVATE_ENABLE_CALLBACK(Ctx->ControlGuid, Ctx->Logger, (MinorFunction != IRP_MN_DISABLE_EVENTS) ? TRUE:FALSE, Ctx->Flags, Ctx->Level ); #endif break; } case IRP_MN_ENABLE_COLLECTION: case IRP_MN_DISABLE_COLLECTION: { Status = STATUS_SUCCESS; break; } case IRP_MN_QUERY_ALL_DATA: case IRP_MN_QUERY_SINGLE_INSTANCE: case IRP_MN_CHANGE_SINGLE_INSTANCE: case IRP_MN_CHANGE_SINGLE_ITEM: case IRP_MN_EXECUTE_METHOD: { Status = STATUS_INVALID_DEVICE_REQUEST; break; } default: { Status = STATUS_INVALID_DEVICE_REQUEST; break; } } return(Status); } // This function is for use by MC-generated code and should not be used directly. DECLSPEC_NOINLINE __inline NTSTATUS __stdcall McGenEventTracingRegister( _In_ LPCGUID ProviderId, _In_opt_ PETWENABLECALLBACK EnableCallback, _In_opt_ PVOID CallbackContext, _Inout_ PREGHANDLE RegHandle ) /*++ Routine Description: This function registers the provider with ETW KERNEL mode. Arguments: ProviderId - Provider ID to be registered with ETW. EnableCallback - Callback to be used. CallbackContext - Context for this provider. RegHandle - Pointer to registration handle. Remarks: If the handle != NULL will return STATUS_SUCCESS If Windows 2000, provider will not register. --*/ { NTSTATUS Status; PMCGEN_TRACE_CONTEXT Context = (PMCGEN_TRACE_CONTEXT)CallbackContext; PAGED_CODE(); if (!Context) { return STATUS_INVALID_PARAMETER; } if (!RegHandle) { return STATUS_INVALID_PARAMETER; } if (*RegHandle) { // // already registered // return STATUS_SUCCESS; } // // Initialize Tracing funtion pointers according to OS version // Status = McGenInitTracingSupport(Context); if (Status == STATUS_INVALID_PARAMETER) { // // This means that its W2K, we will not register the provider // McGenDebug(0,("Generated code does not support Windows 2000\n")); return STATUS_SUCCESS; } // // Vista // if (!Context->McGenPreVista) { Status = Context->PfnEtwRegister(ProviderId, (EnableCallback == NULL) ? McGenControlCallbackV2 : EnableCallback, CallbackContext, RegHandle); } else { Context->Callback = (EnableCallback == NULL) ? McGenControlCallback : (PFN_WMIENTRY_CALLBACK)EnableCallback; Context->ControlGuid = ProviderId; #pragma prefast(suppress:__WARNING_BANNED_API_ARGUMENT_USAGE, "MC Generated Code Down-Level Support"); Status = IoWMIRegistrationControl((PDEVICE_OBJECT)Context, WMIREG_ACTION_REGISTER | WMIREG_FLAG_CALLBACK | WMIREG_FLAG_TRACE_PROVIDER); McGenDebug(0,("IoWMIRegistrationControl Status = %08X\n", Status)); Context->RegistrationHandle = (REGHANDLE)Context; } return Status; } // This function is for use by MC-generated code and should not be used directly. DECLSPEC_NOINLINE __inline NTSTATUS __stdcall McGenEventTracingUnregister( _Inout_ PMCGEN_TRACE_CONTEXT Context ) /*++ Routine Description: Unregister from ETW KERNEL mode. N.B. If provider has not registered, RegistrationHandle == NULL, return STATUS_SUCCESS Arguments: Context - Context for this provider Return Value: Status code. --*/ { NTSTATUS Status = STATUS_SUCCESS; PAGED_CODE(); if (!Context) { return STATUS_INVALID_PARAMETER; } if (!Context->McGenTracingSupportInit) { // // EventRegister macro has not been called // return STATUS_SUCCESS; } if (!(Context->RegistrationHandle)) { // // Provider has not been registerd // return STATUS_SUCCESS; } Context->IsEnabled = 0; if (!Context->McGenPreVista) { Status = Context->PfnEtwUnregister(Context->RegistrationHandle); } else { IoWMIRegistrationControl((PDEVICE_OBJECT)Context, WMIREG_ACTION_DEREGISTER | WMIREG_FLAG_CALLBACK ); Context->Flags = 0; Context->Level = 0; Context->Logger = 0; if (Context->EnableBitsCount > 0) { RtlZeroMemory(Context->EnableBitMask, (((Context->EnableBitsCount - 1) / 32) + 1) * sizeof(ULONG)); } } Context->RegistrationHandle = (REGHANDLE)0; return Status; } #endif // This function is for use by MC-generated code and should not be used directly. FORCEINLINE NTSTATUS McGenInitTracingSupport( _In_ PMCGEN_TRACE_CONTEXT Context ) /*++ Routine Description: This function assigns at runtime the ETW API set to be use for tracing. Arguments: Context - Provider Context Remarks: At runtime assign the functions pointers for the trace APIs to be use. Vista and later use EtwWrite, EtwRegister, otherwise use IoWMIWriteEvent, IoWMIRegistrationControl --*/ { ULONG MajorVersion = 0; ULONG MinorVersion = 0; UNICODE_STRING Name; PAGED_CODE(); if (Context->McGenTracingSupportInit) { return STATUS_SUCCESS; } RtlInitUnicodeString(&Name, L"PsGetVersion"); Context->pfnPsGetVersion = (PFN_PS_GETVERSION) (INT_PTR) MmGetSystemRoutineAddress(&Name); if (Context->pfnPsGetVersion != NULL) { Context->pfnPsGetVersion(&MajorVersion, &MinorVersion, NULL, NULL); } if (MajorVersion < 6) { // // If it's W2K return // if ((MajorVersion == 5) && (MinorVersion == 0)) { return STATUS_INVALID_PARAMETER; } // // XP or W2K3 // Context->McGenPreVista = TRUE; goto done; } RtlInitUnicodeString(&Name, L"EtwRegister"); Context->PfnEtwRegister = (PFN_ETW_REGISTER) (INT_PTR) MmGetSystemRoutineAddress(&Name); RtlInitUnicodeString(&Name, L"EtwUnregister"); Context->PfnEtwUnregister = (PFN_ETW_UNREGISTER) (INT_PTR) MmGetSystemRoutineAddress(&Name); RtlInitUnicodeString(&Name, L"EtwWrite"); Context->PfnEtwWrite = (PFN_ETW_WRITE) (INT_PTR) MmGetSystemRoutineAddress(&Name); if ((Context->PfnEtwRegister == NULL) || (Context->PfnEtwUnregister == NULL) || (Context->PfnEtwWrite == NULL)) { // // Subsitute with the generated funtions // Context->PfnEtwRegister = McGenEventTracingRegister; Context->PfnEtwUnregister = NULL; Context->McGenPreVista = TRUE; McGenDebug(0,("[McGenInitTracingSupport] : Could not load V2 ETW APIs\n")); } done: McGenDebug(1, ("[McGenInitTracingSupport] Prevista %s \n", McGenPreVista ? "TRUE" : "FALSE" )); Context->McGenTracingSupportInit = TRUE; return STATUS_SUCCESS; } //***************************************************************************** // Notes on the ETW event code generated by MC with the -mof option enabled: // // General: The -mof option is deprecated and will be removed in a future // version of MC.exe. // // Arrays : Only constant size arrays supported. The length must be specified // in the manifest. // // Strings: No support for arrays of strings. // // SID : No support for array of SIDs. The macro will take a pointer to the // SID and use appropriate GetLengthSid function to get the length. //***************************************************************************** //********************************************************************** // // Vista down-level support // //********************************************************************** #define __WARNING_BANNED_LEGACY_INSTRUMENTATION_API_USAGE 28735 typedef ULONG (__stdcall *PFN_EVENT_WRITE)( _In_ REGHANDLE RegHandle, _In_ PCEVENT_DESCRIPTOR EventDescriptor, _In_ ULONG UserDataCount, _In_reads_opt_(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData ); typedef ULONG (__stdcall *PFN_EVENT_REGISTER)( _In_ LPCGUID ProviderId, _In_opt_ PENABLECALLBACK EnableCallback, _In_opt_ PVOID CallbackContext, _Out_ PREGHANDLE RegHandle ); typedef ULONG (__stdcall *PFN_EVENT_UNREGISTER)( _In_ REGHANDLE RegHandle ); // This function is for use by MC-generated code and should not be used directly. ULONG __stdcall McGenEventTracingRegister( _In_ LPCGUID ProviderId, _In_opt_ PENABLECALLBACK EnableCallback, _In_opt_ PVOID CallbackContext, _Inout_ PREGHANDLE RegHandle ); // This function is for use by MC-generated code and should not be used directly. ULONG __stdcall McGenEventTracingUnregister2( _Inout_ PMCGEN_TRACE_CONTEXT Context ); BOOLEAN __stdcall McGenEventTracingEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ PCEVENT_DESCRIPTOR EventDescriptor ); BOOLEAN __stdcall McGenLevelKeywordEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ UCHAR Level, _In_ ULONGLONG Keyword ); #if !defined(MCGEN_TRACE_GLOBALS_DEF) #define MCGEN_TRACE_GLOBALS_DEF // These variables are for use by MC-generated code and should not be used directly. __declspec(selectany) BOOLEAN McGenTracingSupportInit = FALSE; __declspec(selectany) BOOLEAN McGenPreVista = FALSE; #pragma prefast(suppress:__WARNING_ENCODE_GLOBAL_FUNCTION_POINTER, "this pointer can not be encoded"); __declspec(selectany) PFN_EVENT_WRITE PfnEventWrite = NULL; #pragma prefast(suppress:__WARNING_ENCODE_GLOBAL_FUNCTION_POINTER, "this pointer can not be encoded"); __declspec(selectany) PFN_EVENT_REGISTER PfnEventRegister = McGenEventTracingRegister; #pragma prefast(suppress:__WARNING_ENCODE_GLOBAL_FUNCTION_POINTER, "this pointer can not be encoded"); __declspec(selectany) PFN_EVENT_UNREGISTER PfnEventUnregister = NULL; #endif // MCGEN_TRACE_GLOBALS_DEF #if !defined(McGenEventEnabledCheck) #define McGenEventEnabledCheck FORCEINLINE BOOLEAN __stdcall McGenLevelKeywordEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ UCHAR Level, _In_ ULONGLONG Keyword ) { if(!EnableInfo){ return FALSE; } if(McGenPreVista){ return ( ((Level <= EnableInfo->Level) || (EnableInfo->Level == 0)) && (((ULONG)(Keyword & 0xFFFFFFFF) == 0) || ((ULONG)(Keyword & 0xFFFFFFFF) & EnableInfo->Flags))); } // // Check if the event level is lower than the level at which // the channel is enabled. // If the event level is 0 or the channel is enabled at level 0, // all levels are enabled. // if ((Level <= EnableInfo->Level) || // This also covers the case of Level == 0. (EnableInfo->Level == 0)) { // // Check if Keyword is enabled // if ((Keyword == (ULONGLONG)0) || ((Keyword & EnableInfo->MatchAnyKeyword) && ((Keyword & EnableInfo->MatchAllKeyword) == EnableInfo->MatchAllKeyword))) { return TRUE; } } return FALSE; } FORCEINLINE BOOLEAN __stdcall McGenEventTracingEnabled( _In_ PMCGEN_TRACE_CONTEXT EnableInfo, _In_ PCEVENT_DESCRIPTOR EventDescriptor ) { return McGenLevelKeywordEnabled(EnableInfo, EventDescriptor->Level, EventDescriptor->Keyword); } #endif // This function is for use by MC-generated code and should not be used directly. DECLSPEC_NOINLINE __inline ULONG __stdcall McGenControlCallback( _In_ WMIDPREQUESTCODE RequestCode, _In_ PVOID Context, _Inout_ ULONG *InOutBufferSize, _Inout_ PVOID Buffer ) /*++ Routine Description: This is the notification callback for pre-Vista support. Arguments: Remarks: ETW calls this function to notify provider of enable/disable --*/ { PMCGEN_TRACE_CONTEXT Ctx = (PMCGEN_TRACE_CONTEXT)Context; TRACEHANDLE Logger; ULONG Flags; ULONG IsEnabled = 0; UCHAR Level; ULONG Ix; *InOutBufferSize = 0; switch (RequestCode) { case WMI_ENABLE_EVENTS: { Logger = GetTraceLoggerHandle( Buffer ); Level = GetTraceEnableLevel(Logger); Flags = GetTraceEnableFlags(Logger); IsEnabled = 1; McGenDebug(1, ("[Callback] WMI_ENABLE_EVENTS Ctx %p Flags %x" " Lev %d Logger %I64x\n", Ctx, Flags, Level, Logger) ); // // 0 for flags is considered "ALL" // if (Flags == 0) { Flags = 0xFFFFFFFF; } break; } case WMI_DISABLE_EVENTS: { Logger = 0; Flags = 0; Level = 0; if (Ctx->EnableBitsCount > 0) { RtlZeroMemory(Ctx->EnableBitMask, (((Ctx->EnableBitsCount - 1) / 32) + 1) * sizeof(ULONG)); } McGenDebug(1, ("[Callback] WMI_DISABLE_EVENTS Ctx 0x%08p\n", Ctx)); break; } default: { return(ERROR_INVALID_PARAMETER); } } Ctx->Logger = Logger; Ctx->Level = Level; Ctx->Flags = Flags; Ctx->IsEnabled = IsEnabled; for (Ix = 0; Ix < Ctx->EnableBitsCount; Ix += 1) { if (McGenLevelKeywordEnabled(Ctx, Ctx->EnableLevel[Ix], Ctx->EnableKeyWords[Ix]) != FALSE) { Ctx->EnableBitMask[Ix >> 5] |= (1 << (Ix % 32)); } else { Ctx->EnableBitMask[Ix >> 5] &= ~(1 << (Ix % 32)); } } #ifdef MCGEN_PRIVATE_ENABLE_CALLBACK // // Call user defined callback down-level // MCGEN_PRIVATE_ENABLE_CALLBACK( RequestCode, Context, InOutBufferSize, Buffer ); #endif return(ERROR_SUCCESS); } // This function is for use by MC-generated code and should not be used directly. FORCEINLINE ULONG __stdcall McGenEventTracingRegister( _In_ LPCGUID ProviderId, _In_opt_ PENABLECALLBACK EnableCallback, _In_opt_ PVOID CallbackContext, _Inout_ PREGHANDLE RegHandle ) /*++ Routine Description: This function registers the provider with ETW and handles OS version. Arguments: ProviderId - Provider Id to be register with ETW EnableCallback - Callback to be used: Vista : McGenControlCallbackV2 down-level : McGenControlCallback CallbackContext - Context for this provider is PMCGEN_TRACE_CONTEXT RegHandle - down-level is a pointer to PMCGEN_TRACE_CONTEXT Remarks: Register with ETW Vista down-level, and set the RegHandle as a pointer to PMCGEN_TRACE_CONTEXT for this provider. For Vista registers the provider. --*/ { ULONG Error = ERROR_SUCCESS; if(!RegHandle) { return ERROR_INVALID_PARAMETER; } if(*RegHandle) { // // already registered, ignore this one // goto Cleanup; } // // Initialize Tracing funtion pointers according to OS version // McGenInitTracingSupport(); // // Vista // if(!McGenPreVista ){ Error = PfnEventRegister(ProviderId, (EnableCallback == NULL) ? McGenControlCallbackV2 : EnableCallback, CallbackContext, RegHandle); } else { // // down-level : XP/W2K3 // PMCGEN_TRACE_CONTEXT Context = (PMCGEN_TRACE_CONTEXT)CallbackContext; TRACE_GUID_REGISTRATION TraceRegistration; if(CallbackContext == NULL) { Error = ERROR_INVALID_PARAMETER; goto Cleanup; } *RegHandle = (REGHANDLE)CallbackContext; TraceRegistration.Guid = ProviderId; TraceRegistration.RegHandle = 0; #pragma prefast(suppress:__WARNING_BANNED_LEGACY_INSTRUMENTATION_API_USAGE, "Generated Code Down-Level Support"); Error = RegisterTraceGuids((EnableCallback == NULL) ? McGenControlCallback : (WMIDPREQUEST)EnableCallback, CallbackContext, ProviderId, 1, &TraceRegistration, 0, 0, &Context->RegistrationHandle); } Cleanup: return Error; } #if !defined(McGenEventTracingUnregister2_df) #define McGenEventTracingUnregister2_df #pragma warning(push) #pragma warning(disable:4068) // This function is for use by MC-generated code and should not be used directly. __inline ULONG __stdcall McGenEventTracingUnregister2( _Inout_ PMCGEN_TRACE_CONTEXT Context ) /*++ Routine Description: Unregister from ETW. Arguments: Context is the pointer to the provider context. --*/ { ULONG Error; if (Context == NULL) { return ERROR_INVALID_PARAMETER; } if (!McGenTracingSupportInit) { // // EventRegister macro has not been called // return ERROR_SUCCESS; } if (!Context->RegistrationHandle) { // // Provider has not registered // return ERROR_SUCCESS; } // // Vista // if (!McGenPreVista) { Error = PfnEventUnregister(Context->RegistrationHandle); } else { // // down-level : XP/W2K3 // #pragma prefast(suppress:__WARNING_BANNED_LEGACY_INSTRUMENTATION_API_USAGE, "Generated Code Down-Level Support"); Error = UnregisterTraceGuids(Context->RegistrationHandle); Context->Flags = 0; Context->Level = 0; Context->Logger = 0; if (Context->EnableBitsCount > 0) { RtlZeroMemory(Context->EnableBitMask, (((Context->EnableBitsCount - 1) / 32) + 1) * sizeof(ULONG)); } } Context->RegistrationHandle = 0; return Error; } #pragma warning(pop) #endif // McGenEventTracingUnregister2_df // This function is for use by MC-generated code and should not be used directly. FORCEINLINE ULONG __stdcall McGenEventTracingUnregister(_In_ PREGHANDLE RegHandle) /*++ Routine Description: Unregister from ETW. Arguments: RegHandle is the pointer to the provider context down-level Remarks: Unregister provider and disables provider context --*/ { ULONG Error = ERROR_SUCCESS; if(!RegHandle) { return ERROR_INVALID_PARAMETER; } if (!McGenTracingSupportInit){ // // EventRegister macro has not been called // return ERROR_SUCCESS; } if(!(*RegHandle)) { // // Provider has not registerd // return ERROR_SUCCESS; } // // Vista // if(!McGenPreVista ){ Error = PfnEventUnregister(*RegHandle); } else { // // down-level : XP/W2K3 // PMCGEN_TRACE_CONTEXT Context = (PMCGEN_TRACE_CONTEXT)(ULONG_PTR)(*RegHandle); #pragma prefast(suppress:__WARNING_BANNED_LEGACY_INSTRUMENTATION_API_USAGE, "Generated Code Down-Level Support"); Error = UnregisterTraceGuids(Context->RegistrationHandle); Context->Flags = 0; Context->Level = 0; Context->Logger = 0; if (Context->EnableBitsCount > 0) { RtlZeroMemory(Context->EnableBitMask, (((Context->EnableBitsCount - 1) / 32) + 1) * sizeof(ULONG)); } Context->RegistrationHandle = 0; } *RegHandle = (REGHANDLE)0; return Error; } #if !defined(MCGEN_TRACING_DLL) #define MCGEN_TRACING_DLL L"advapi32.dll" #endif #if !defined(MCGEN_TRACING_DLL_V2) #define MCGEN_TRACING_DLL_V2 L"api-ms-win-eventing-provider-l1-1-0.dll" #endif #if !defined(MCGEN_EVENTWRITE_API) #define MCGEN_EVENTWRITE_API "EventWrite" #endif #if !defined(MCGEN_EVENTREGISTER_API) #define MCGEN_EVENTREGISTER_API "EventRegister" #endif #if !defined(MCGEN_EVENTUNREGISTER_API) #define MCGEN_EVENTUNREGISTER_API "EventUnregister" #endif #if !defined(McGenInitTracingSupportFunc) #define McGenInitTracingSupportFunc // This function is for use by MC-generated code and should not be used directly. FORCEINLINE VOID McGenInitTracingSupport( VOID ) /*++ Routine Description: This function assigns at runtime the ETW API set to be use for tracing. Arguments: Remarks: At runtime assign the function pointers for the trace APIs to be used. Vista and later uses WriteEvent, otherwise use TraceEvent. --*/ { OSVERSIONINFO OSVersion; HINSTANCE TraceApiDll = NULL; BOOL OkVersion; BOOL IsWin8OrLater = FALSE; if (McGenTracingSupportInit){ return; } OSVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); OkVersion = GetVersionEx(&OSVersion); if (OkVersion) { McGenPreVista = (OSVersion.dwMajorVersion < 6); IsWin8OrLater = (OSVersion.dwMajorVersion > 6) || ((OSVersion.dwMajorVersion == 6) && (OSVersion.dwMinorVersion > 1)); if (McGenPreVista) { goto done; } } TraceApiDll = GetModuleHandleW(MCGEN_TRACING_DLL); if ((TraceApiDll == NULL) && (IsWin8OrLater != FALSE)) { TraceApiDll = GetModuleHandleW(MCGEN_TRACING_DLL_V2); } if (TraceApiDll != NULL) { PfnEventWrite = (PFN_EVENT_WRITE)GetProcAddress(TraceApiDll, MCGEN_EVENTWRITE_API); if (NULL == PfnEventWrite) { if (OkVersion) { McGenDebug(1, ("[McGenInitTracing] Failed to load EventWrite, using PreVista ETW \n")); } McGenPreVista = TRUE; goto done; } PfnEventRegister = (PFN_EVENT_REGISTER) GetProcAddress(TraceApiDll, MCGEN_EVENTREGISTER_API); if (NULL == PfnEventRegister) { McGenDebug(1, ("[McGenInitTracing] Failed to load EventRegister, using PreVista ETW \n")); PfnEventRegister = McGenEventTracingRegister; McGenPreVista = TRUE; goto done; } PfnEventUnregister = (PFN_EVENT_UNREGISTER) GetProcAddress(TraceApiDll, MCGEN_EVENTUNREGISTER_API); if (NULL == PfnEventUnregister) { McGenDebug(1, ("[McGenInitTracing] Failed to load EventUnregister, using PreVista ETW \n")); PfnEventRegister = McGenEventTracingRegister; McGenPreVista = TRUE; goto done; } } else { McGenDebug(1, ("[McGenInitTracing] Failed to load %ls, using PreVista ETW \n", MCGEN_TRACING_DLL)); McGenPreVista = TRUE; } done: McGenDebug(1, ("[McGenInitTracing] Prevista %s \n", McGenPreVista ? "TRUE" : "FALSE" )); McGenTracingSupportInit = TRUE; } #endif //--------------------------------------------------------------------- // // // Generated by Message Compiler (mc.exe) // // Copyright (c) Microsoft Corporation. All Rights Reserved. // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //--------------------------------------------------------------------- { using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Diagnostics.Eventing; using Microsoft.Win32; using System.Runtime.InteropServices; using System.Security.Principal; using System.Threading; using System.Security; internal class EventProviderVersionTwo : EventProvider { internal EventProviderVersionTwo(Guid id) : base(id) {} [StructLayout(LayoutKind.Explicit, Size = 16)] private struct EventData { [FieldOffset(0)] internal UInt64 DataPointer; [FieldOffset(8)] internal uint Size; [FieldOffset(12)] internal int Reserved; } // // ETW Pre Vista support class // internal class EventProviderVersionOne : IDisposable { EtwNativeMethods.EtwEnableCallback m_etwCallback; // Trace Callback function private ulong m_regHandle; // Trace Registration Handle private byte m_level; // Tracing Level private long m_flags; // Trace Enable Flags private int m_enabled; // Enabled flag from Trace callback private Guid m_providerId; // Control Guid private ulong m_logger; // logger private int m_disposed; // when 1, provider has unregister internal const uint s_eventFlags = 0x00140000; // WNODE_FLAG_TRACED_GUID |WNODE_FLAG_USE_MOF_PTR // // Mof Structure is the same as EventData // [StructLayout(LayoutKind.Explicit, Size = 16)] private struct EventData { [FieldOffset(0)] internal UInt64 DataPointer; [FieldOffset(8)] internal uint Size; [FieldOffset(12)] internal int Reserved; } internal EventProviderVersionOne(Guid providerId) { m_providerId = providerId; // // Register the ProviderId with ETW // Register(); } // // Registration Vista Down-Level // private unsafe uint Register () { m_etwCallback = new EtwNativeMethods.EtwEnableCallback(EtwEnableCallBack); EtwNativeMethods.TRACE_GUID_REGISTRATION guidReg; // // This dummyGuid is there for ETW backward compatibility issues // Guid dummyGuid = new Guid ("{b4955bf0-3af1-4740-b475-99055d3fe9aa}"); guidReg.Id = (IntPtr)(&dummyGuid); guidReg.RegHandle = IntPtr.Zero; return EtwNativeMethods.RegisterTraceGuids(m_etwCallback, null, ref m_providerId, 1, ref guidReg, null, null, out m_regHandle); } // // called by ETW to enable or disable tracing // internal unsafe uint EtwEnableCallBack (EtwNativeMethods.WMIDPREQUESTCODE requestCode, IntPtr context, uint* bufferSize, byte* byteBuffer) { switch (requestCode) { case EtwNativeMethods.WMIDPREQUESTCODE.WMI_ENABLE_EVENTS: m_logger = EtwNativeMethods.GetTraceLoggerHandle(byteBuffer); m_flags = EtwNativeMethods.GetTraceEnableFlags (m_logger); m_level = EtwNativeMethods.GetTraceEnableLevel (m_logger); m_enabled = 1; break; case EtwNativeMethods.WMIDPREQUESTCODE.WMI_DISABLE_EVENTS: m_enabled = 0; m_logger = 0L; m_level = 0; m_flags = 0; break; default: m_enabled = 0; m_logger = 0L; break; } return 0; } // // implement Dispose Pattern to early deregister from ETW insted of waiting for // the finalizer to call deregistration. // Once the user is done with the provider it needs to call Close() or Dispose() // If neither are called the finalizer will unregister the provider anyway. // public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { // // explicit cleanup is done by calling Dispose with true from // Dispose() or Close(). The disposing arguement is ignored because there // are no unmanaged resources. // The finalizer calls Dispose with false. // // // check if the object has been already been disposed // if (m_disposed == 1) return; if (Interlocked.Exchange(ref m_disposed, 1) != 0) { // somebody is already disposing the provider return; } // // Disables Tracing in the provider, then unregisters // m_enabled = 0; Deregister(); } // // This method deregisters the controlGuid of this class with ETW. // public virtual void Close() { Dispose(); } ~EventProviderVersionOne() { Dispose(false); } // // This method unregisters from ETW. // private unsafe void Deregister() { // // Unregister from ETW using the RegHandle saved from // the register call. // if (m_regHandle != 0) { EtwNativeMethods.UnregisterTraceGuids(m_regHandle); m_regHandle = 0; } } public bool IsEnabled(byte level, uint flags) { // // If not enabled, return false. // if (m_enabled == 0) { return false; } // This also covers the case of Level == 0. if ((level <= m_level) || (m_level == 0)) { // // Check if flags is enabled // if ((flags == 0) || (((flags & m_flags) != 0))) { return true; } } return false; } public bool IsEnabled() { if (m_enabled == 0) { return false; } return true; } internal unsafe bool WriteEvent(ref EventDescriptor eventDescriptor, ref Guid eventGuid, string data) { if (IsEnabled(eventDescriptor.Level, (uint)eventDescriptor.Keywords)) { int eventSize = sizeof(EtwNativeMethods.EVENT_TRACE_HEADER)+ sizeof(EventData); byte* userData = stackalloc byte[eventSize]; EventData* userDataPtr = (EventData*)(userData+ sizeof(EtwNativeMethods.EVENT_TRACE_HEADER)); EtwNativeMethods.EVENT_TRACE_HEADER* header = (EtwNativeMethods.EVENT_TRACE_HEADER*)userData; // // header here // header->Guid = eventGuid; header->Flags = s_eventFlags; // WNODE_FLAG_TRACED_GUID |WNODE_FLAG_USE_MOF_PTR; header->Version = (short)eventDescriptor.Version; header->Level = eventDescriptor.Level; header->Type = eventDescriptor.Opcode; header->Size = (short)eventSize; // // Event data here userDataPtr->Size = (uint)(data.Length + 1)*sizeof(char); fixed (char* a0 = data) { userDataPtr->DataPointer = (ulong)a0; EtwNativeMethods.TraceEvent(m_logger, userData); } } return true; } [SuppressUnmanagedCodeSecurityAttribute()] internal static class EtwNativeMethods { [StructLayout (LayoutKind.Explicit, Size=48)] internal struct EVENT_TRACE_HEADER { [FieldOffset (0)] internal short Size; [FieldOffset (2)] internal ushort FieldTypeFlags; [FieldOffset (4)] internal byte Type; [FieldOffset (5)] internal byte Level; [FieldOffset (6)] internal short Version; [FieldOffset (8)] internal uint ThreadId; [FieldOffset (12)] internal uint ProcessId; [FieldOffset (16)] internal Int64 TimeStamp; [FieldOffset (24)] internal Guid GuidPtr; [FieldOffset (24)] internal Guid Guid; [FieldOffset (40)] internal uint ClientContext; [FieldOffset (44)] internal uint Flags; } [StructLayout (LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] internal struct TRACE_GUID_REGISTRATION { internal IntPtr Id; internal IntPtr RegHandle; } internal enum WMIDPREQUESTCODE : uint { WMI_ENABLE_EVENTS = 4, WMI_DISABLE_EVENTS = 5 } internal const String ADVAPI32 = "advapi32.dll"; // // Callback WMIDPREQUEST // internal unsafe delegate uint EtwEnableCallback ( WMIDPREQUESTCODE requestCode, IntPtr requestContext, uint* bufferSize, byte* buffer ); // // Registration APIs // [DllImport (ADVAPI32, ExactSpelling = true, EntryPoint="RegisterTraceGuidsW", CharSet=System.Runtime.InteropServices.CharSet.Unicode)] internal static extern unsafe uint RegisterTraceGuids( EtwEnableCallback requestAddress, void* requestContext, ref Guid controlGuid, uint guidCount, ref TRACE_GUID_REGISTRATION traceGuidReg, string mofImagePath, string mofResourceName, out ulong registrationHandle ); [DllImport (ADVAPI32, ExactSpelling = true, EntryPoint="UnregisterTraceGuids", CharSet=System.Runtime.InteropServices.CharSet.Unicode)] internal static extern int UnregisterTraceGuids (ulong registrationHandle); // // Enable // [DllImport (ADVAPI32, ExactSpelling = true, EntryPoint="GetTraceLoggerHandle", CharSet=System.Runtime.InteropServices.CharSet.Unicode)] internal static extern unsafe ulong GetTraceLoggerHandle (byte* Buffer); [DllImport (ADVAPI32, ExactSpelling = true, EntryPoint="GetTraceEnableFlags", CharSet=System.Runtime.InteropServices.CharSet.Unicode)] internal static extern uint GetTraceEnableFlags (ulong TraceHandle); [DllImport(ADVAPI32, ExactSpelling = true, EntryPoint="GetTraceEnableLevel", CharSet=System.Runtime.InteropServices.CharSet.Unicode)] internal static extern byte GetTraceEnableLevel (ulong TraceHandle); // // Writing (Publishing/Logging) APIs // [DllImport (ADVAPI32, ExactSpelling = true, EntryPoint="TraceEvent", CharSet=System.Runtime.InteropServices.CharSet.Unicode)] internal static extern unsafe uint TraceEvent ( ulong traceHandle, byte* eventTrace ); } (default)EventWriteForContextwin_None!!!NOT SUPPORTED!!!const signed charconst unsigned charconst signed shortconst unsigned shortconst signed intconst unsigned intconst signed __int64const unsigned __int64const floatconst doubleWinRtProvider%ls : error : Failed trying to open a header file ("%ls") for the manifest constants. %ls : error : Failed trying to open MOF file ("%ls"). idl%ls : error : Failed to open ("%ls") for IDL generation hpp%ls : error : Failed to open ("%ls") for WinRT headerfile generation cpp%ls : error : Failed to open ("%ls") for WinRT CPP file generation XMLAppXExtension%ls : error : Failed to open ("%ls") for WinRT AppX Extension XML file generation js%ls : error : Failed to open ("%ls") for WinRT JavaScript stubs file generation #define %-32ls 0x%08lXL$(string. #define MSG_%-32ls 0x%08lXL%ls : error : Failed to Create OutputFile. Return code = %d namespace %ls #include #include #include #ifndef ETW_INLINE #ifdef _ETW_KM_ // In kernel mode, save stack space by never inlining templates. #define ETW_INLINE DECLSPEC_NOINLINE __inline #else // In user mode, save code size by inlining templates as appropriate. #define ETW_INLINE __inline #endif #endif // ETW_INLINE #if defined(__cplusplus) extern "C" { #endif #if !defined(McGenDebug) #define McGenDebug(a,b) ((void)0) #endif // // MCGEN_ENABLE_CHECK macro: // Determines whether the specified event would be considered as enabled // based on the state of the specified context. Slightly faster than calling // McGenEventEnabled directly. // #ifndef MCGEN_ENABLE_CHECK #define MCGEN_ENABLE_CHECK(Context, Descriptor) (Context.IsEnabled && McGenEventEnabled(&Context, &Descriptor)) #endif #if !defined(MCGEN_CONTROL_CALLBACK) #define MCGEN_CONTROL_CALLBACK #endif // MCGEN_CONTROL_CALLBACK #if !defined(McGenEventRegisterUnregister) #define McGenEventRegisterUnregister #endif // McGenEventRegisterUnregister #if !defined(McGenEventRegisterUnregister) #define McGenEventRegisterUnregister #define MANIFEST_MAX_MOF_FIELDS_SUPPORTED 16 VOID McGenInitTracingSupport( VOID ); #if !defined(McGenEventRegisterUnregister) #define McGenEventRegisterUnregister #pragma warning(push) #pragma warning(disable:4068) #pragma warning(pop) #endif // McGenEventRegisterUnregister // // MCGEN_ENABLE_CHECK macro: // Determines whether the specified event would be considered as enabled // based on the state of the specified context. Slighly faster than calling // McGenEventTracingEnabled directly. // #ifndef MCGEN_ENABLE_CHECK #define MCGEN_ENABLE_CHECK(Context, Descriptor) (Context.IsEnabled && McGenEventTracingEnabled(&Context, &Descriptor)) #endif //*** // Warning : Classic Crimson Provider Ignored // Provider : %ls //*** GetManifestData: Failed with Error 0x%x%ls : error : GetManifestData: Failed with Error 0x%x #if defined(__cplusplus) } #endif %ls : error : I/O error %u %ls_EVENT_0x%x_%x_%x_%x_%x_%x_%I64x EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR %ls = {0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%I64x}; #define %ls_value 0x%x%lsEvent%d %ls = new EventDescriptor(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, (long)0x%I64x);0x%08x, 0x%04x, 0x%04x, {0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x%cr%dR%d%c%dr%d%c%d%cR%cr%d%c%cR%d #define %ls%ls%ls(pContext, Activity%ls_Len_, ) \ MCGEN_EVENT_ENABLED(%ls) \ ? MCGEN_EVENT_ENABLED_FORCONTEXT(pContext, %ls) \ ? _mcgen_TEMPLATE_FOR_%ls(&%ls_Context&(pContext)->Context&_mcgen_CheckContextType_%ls(pContext)->Context, Activity, NULL, &%ls%ls, &%lsId, %ls_Len_, %ls) : 0Unknown combination (Level, Keyword) = (%d, 0x%I64x) // // Enablement check macro for event "%ls" // #define EventEnabled%ls() _mcgen_EVENT_BIT_SET(%lsEnableBits, %u) #define EventEnabled%ls_ForContext(pContext) _mcgen_EVENT_BIT_SET(_mcgen_CheckContextType_%ls(pContext)->EnableBits, %u) // // Event write macros for event "%ls" // // MC Note :: Macro for event id = %d // This event contains complex types that require the caller to pack the data. // Refer to the note at the top of this header for additional details. //%ls : error : Event %ls must use a task and define eventGUID %ls : error : Too Many Properties for template : %ls MofCoMcTemplate%ls%ls%lc0%ls : error : MC cound not recognize type for template %ls property = %ls _AssumeEnabled_%ls_%lsAssumeEnabled // This macro is for use by MC-generated code and should not be used directly. #define _mcgen_TEMPLATE_FOR_%ls _mcgen_PASTE2(%ls_, MCGEN_EVENTWRITETRANSFER) #define _mcgen_TEMPLATE_FOR_%ls %ls %ls : error : ControlGuid not supported for MOF generation %ls : error : Opcodes are required for MOF generation #pragma autorecover #pragma classflags("forceupdate") #pragma namespace("\\\\.\\root\\WMI") // // ETW Generated File from Manifest // MC: "%ls" event count = %Id [Dynamic, Description("%ls") : amended, guid("{%ls}"), locale("MS\\0x409")] class %ls : EventTrace { [Description ("Enable Flags") : amended, ValueDescriptions{, "%ls "%ls}, DefineValues{ "%ls"%ls Values{ ValueMap{ "0x%.8X"%ls}: amended ] uint32 Flags; [Description ("Levels") : amended, ValueDescriptions{ "Abnormal exit or termination", "Severe errors that need logging", "Warnings such as allocation failure", "Includes non-error cases", "Detailed traces from intermediate steps" } : amended, DefineValues{ "TRACE_LEVEL_FATAL", "TRACE_LEVEL_ERROR", "TRACE_LEVEL_WARNING" "TRACE_LEVEL_INFORMATION", "TRACE_LEVEL_VERBOSE" }, Values{ "Fatal", "Error", "Warning", "Information", "Verbose" }, ValueMap{ "0x1", "0x2", "0x3", "0x4", "0x5" }, ValueType("index") ] uint32 Level; };%ls : warning : There are more than %lu versions of this event [Dynamic, Description("%ls") : amended, guid("{%ls}"), EventVersion(%d), DisplayName("%ls") : amended ] class %ls_V%d:%ls { };%ls :ERROR: For Task : '%ls', attribute "eventGUID" is required on element <task> for downlevel code generation If the intent is to raise events in XP/W2K3 then add "eventGUID" attribute [Dynamic, Description("%ls") : amended, EventType{%d, %d [Dynamic, Description("%ls") : amended, EventType(%d%c, EventTypeName%c%c "%ls"%c : amended ] class %ls_V%d:%ls_V%d { [Dynamic, Description("%ls") : amended, EventType(%d), EventTypeName("%ls") : amended ] class %ls_V%d:%ls_V%d { };%ls : warning : Property Not Supported = %ls NULL Event Name%ls : error : Maximum number of properties is %lu :: Event = %ls %ls : error : No support for non fixed size arrays in MOF = %ls [WmiDataId(%d), Description("%ls%d") : amended, read] %ls %ls%d; [WmiDataId(%d), Description("%ls") : amended,BitValuesValues %ls{ "%ls", "%ls" }:amended,BitMapValueMap "%d", "%d" } ] uint32 %ls;%ls : error : Unsupported map type %d in MOF read] %ls %ls;stringsint8uint8sint16uint16sint32uint32sint64uint64real32real64objectpointer StringTermination("NullTerminated"), format("w"), extension("Guid"), pointer, extension("Sid"), format("x"), StringTermination("Counted"), format("w"), StringTermination("Counted"), StringTermination("ReverseCounted"), format("w"), StringTermination("ReverseCounted"), StringTermination("NotCounted"), format("w"), StringTermination("NotCounted"), format("c"), extension("SizeT"), // // Event method for %ls //%ls : error : Too Many Properties for template : %ls !!!!! // // The event's template has types not supported in c# generation // // // The event's template has types not supported in c# generation // use win:Binary or win:Int8 array instead // static public %lsbool %ls%ls(int %ls_Len_, []%ls%ls %ls, %ls%ls %ls) { return m_provider.WriteEvent(ref %ls, %ls); } if (m_vistaProvider) { return m_provider.WriteEvent(ref %ls, %ls); } else { if (!m_providerLegacy.IsEnabled()) { return true; } return m_providerLegacy.WriteEvent(ref %ls, ref %lsId, %ls); } } if (!m_provider.IsEnabled()) { return true; } if (m_vistaProvider) { if (!m_provider.IsEnabled()) { return true; } ++*EventDescriptor*++ %*ls return m_provider.Template%ls(ref %ls, %*ls return m_provider.TemplateEventDescriptor(ref %ls); } else { if (!m_providerLegacy.IsEnabled()) { return true; } return m_providerLegacy.TemplateEventDescriptor(ref %ls, ref %lsId); } %ls, %ls); } else { if (!m_providerLegacy.IsEnabled()) { return true; } return m_providerLegacy.Template%ls(ref %ls, ref %lsId, } } %ls : error : ControlGuid not supported for CS generation // // WARNING: This provider uses provider traits, but the C# code generation // does not support provider traits. Provider traits will not be registered // or included in events. // : IDisposable public %lsclass %ls%ls { // // Provider "%ls" event count = %Id // internal %lsEventProviderVersionTwo m_provider = new EventProviderVersionTwo(new Guid("%ls")); internal %lsEventProviderVersionTwo m_provider; internal %lsEventProviderVersionOne m_providerLegacy; private %lsbool m_vistaProvider = (Environment.OSVersion.Version.Major > 5); private %lsGuid m_providerId; // // Task : eventGUIDs // private %lsGuid %lsId = new Guid("%ls"); // // Event Descriptors //private static protected %lsEventDescriptor %ls; protected virtual void Dispose(bool disposing) { if (disposing) { m_provider.Dispose(); } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { if (m_vistaProvider) { m_provider.Dispose(); } else { m_providerLegacy.Dispose(); } } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); }staticpublic %ls %ls() { unchecked { } } } m_providerId = new Guid("%ls"); if (m_vistaProvider) { m_provider = new EventProviderVersionTwo(m_providerId); } else { m_providerLegacy = new EventProviderVersionOne(m_providerId); } } %ls : error : Template for Event Id = %d contains types that can not be described in MOF : (structures, non fixed size Arrays, Binary, SystemTime) } #ifndef _%ls_def #define _%ls_def typedef enum _%ls { %ls%ls = %d, } %ls; #endif // _%ls_def _ContextHandleMcGenEventRegisterContextMcGenEventRegister #ifndef %ls%ls%ls #define %ls%ls%ls(%ls) %ls(&%ls, McGenControlCallbackV2, &%ls_Context, &%ls%ls%ls) #endif %ls : error : ControlGuid not supported for downlevel code generation //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Provider "%ls" event count %Id //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Id_ // Provider GUID = %ls EXTERN_C __declspec(selectany) const GUID %ls = {%ls};_ControlGuid // Control GUID = %ls #ifndef %ls_Traits #define %ls_Traits ( \ "\x%02X\x%02X" /* Total size of traits = %u */ \ "\\\"\%u%u%u omitted\x00" /* Provider name%ls */ \ "\x13\x00\x01\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X" /* Group guid */ \ "\x13\x00\x02\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X\x%02X" /* Decode guid */ \ ) #define %ls_Traits NULL #endif // %ls_Traits // // Channel // #define %ls 0x%x #define %ls_KEYWORD 0x%I64X #define %ls_CHANNEL_%ls 0x%x #define %ls_CHANNEL_%ls_KEYWORD 0x%I64X // // Levels // #define %ls_LEVEL_%ls 0x%x // // Opcodes // #define %ls_OPCODE_%ls 0x%x // // Tasks // #define %ls_TASK_%ls 0x%x EXTERN_C __declspec(selectany) const GUID %lsId = {%ls}; // // Keyword // #define %ls 0x%I64X #define %ls_KEYWORD_%ls 0x%I64X // // Event Descriptors //NULL #define %ls 0x%XL // // Event Enablement Bits // These variables are for use by MC-generated code and should not be used directly. // EXTERN_C __declspec(selectany) DECLSPEC_CACHEALIGN ULONG %lsEnableBits[%d]; EXTERN_C __declspec(selectany) const ULONGLONG %lsKeywords[%d] = {0x%I64x}; EXTERN_C __declspec(selectany) const unsigned char %lsLevels[%d] = {%d // // Provider context // EXTERN_C __declspec(selectany) MCGEN_TRACE_CONTEXT %ls_Context = _Traits0(ULONG_PTR){0, %ls%ls%ls, 0, 0, 0, 0, 0, 0, %d, %lsEnableBits, %lsKeywords, %lsLevels};, (ULONG_PTR){0%ls%ls%ls}; // // Provider REGHANDLE // #define %ls (%ls_Context.RegistrationHandle) {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, %d, %lsEnableBits, %lsKeywords, %lsLevels};{0};1 do not // // This macro is set to %ls, indicating that the EventWrite[Name] macros%ls // have an Activity parameter. This is controlled by the -km and -um options. // #define %ls_EventWriteActivity %ls // // Register with ETW using the control GUID specified in the manifest. // Invoke this macro during module initialization (i.e. program startup, // DLL process attach, or driver load) to initialize the provider. // Note that if this function returns an error, the error means that // will not work, but no action needs to be taken -- even if EventRegister // returns an error, it is generally safe to use EventWrite and // EventUnregister macros (they will be no-ops if EventRegister failed). //EventRegister // // Register with ETW using a specific control GUID (i.e. a GUID other than what // is specified in the manifest). Advanced scenarios only. //(Guid)GuidEventRegisterByGuid // // Unregister with ETW and close the provider. // Invoke this macro during module shutdown (i.e. program exit, DLL process // detach, or driver unload) to unregister the provider. // Note that you MUST call EventUnregister before DLL or driver unload // (not optional): failure to unregister a provider before DLL or driver unload // will result in crashes. // #ifndef EventUnregister%ls #define EventUnregister%ls() McGenEventUnregister(&%ls) #endif // // MCGEN_ENABLE_FORCONTEXT_CODE_GENERATION macro: // Define this macro to enable support for caller-allocated provider context. // #ifdef MCGEN_ENABLE_FORCONTEXT_CODE_GENERATION // // Advanced scenarios: Caller-allocated provider context. // Use when multiple differently-configured provider handles are needed, // e.g. for container-aware drivers, one context per container. // // Usage: // // - Caller enables the feature before including this header, e.g. // #define MCGEN_ENABLE_FORCONTEXT_CODE_GENERATION 1 // - Caller allocates memory, e.g. pContext = malloc(sizeof(McGenContext_%ls)); // - Caller registers the provider, e.g. EventRegister%ls_ForContext(pContext); // - Caller writes events, e.g. EventWriteMyEvent_ForContext(pContext, ...); // - Caller unregisters, e.g. EventUnregister%ls_ForContext(pContext); // - Caller frees memory, e.g. free(pContext); // typedef struct tagMcGenContext_%ls { // The fields of this structure are subject to change and should // not be accessed directly. To access the provider's REGHANDLE, // use %ls_ForContext(pContext). MCGEN_TRACE_CONTEXT Context; ULONG EnableBits[%u]; } McGenContext_%ls; _mcgen_PASTE3(_mcgen_RegisterForContext__, MCGEN_EVENTREGISTER, _mcgen_EVENTSETINFORMATION_SUFFIX)_mcgen_PASTE2(_mcgen_RegisterForContext__, MCGEN_EVENTREGISTER) #define EventRegister%ls_ForContext(pContext) %ls(&%ls, pContext) #define EventRegisterByGuid%ls_ForContext(Guid, pContext) %ls(&(Guid), pContext) #define EventUnregister%ls_ForContext(pContext) McGenEventUnregister(&(pContext)->Context.RegistrationHandle) // // Provider REGHANDLE for caller-allocated context. // #define %ls_ForContext(pContext) ((pContext)->Context.RegistrationHandle) // This function is for use by MC-generated code and should not be used directly. // Initialize and register the caller-allocated context. __inline ULONG __stdcall %ls( _In_ LPCGUID pProviderId, _Out_ McGenContext_%ls* pContext) { RtlZeroMemory(pContext, sizeof(*pContext)); pContext->Context.Logger = (ULONG_PTR)%ls_Traits; pContext->Context.EnableBitsCount = %u; pContext->Context.EnableBitMask = pContext->EnableBits; pContext->Context.EnableKeyWords = %lsKeywords; pContext->Context.EnableLevel = %lsLevels;.RegistrationHandle return %ls( pProviderId, McGenControlCallbackV2, &pContext->Context, &pContext->Context%ls); } // This function is for use by MC-generated code and should not be used directly. // Trigger a compile error if called with the wrong parameter type. FORCEINLINE _Ret_ McGenContext_%ls* _mcgen_CheckContextType_%ls(_In_ McGenContext_%ls* pContext) { return pContext; } #endif // MCGEN_ENABLE_FORCONTEXT_CODE_GENERATION // // Register with ETW XP, W2K, W2K3, Vista +, Kernel Mode // #ifndef EventRegister%ls #define EventRegister%ls() McGenEventTracingRegister(&%ls, NULL, &%ls_Context, &%ls_Context.RegistrationHandle) #endif // // Unregister with ETW // #ifndef EventUnregister%ls #define EventUnregister%ls() McGenEventTracingUnregister(&%ls_Context) #endif // // Register with ETW XP, W2K, W2K3, Vista + // #ifndef EventRegister%ls #define EventRegister%ls() McGenEventTracingRegister(&%ls, NULL, &%ls_Context, &%ls) #endif // // Unregister with ETW // #ifndef EventUnregister%ls #define EventUnregister%ls() McGenEventTracingUnregister2(&%ls_Context) #endif _Arg%d EventDataDescCreate(&EventData[%d],%ls, (ULONG)(sizeof(WCHAR)*%ls*%ls)); // Blob containing %ls concatenated strings; each string has the same length (%ls)%ls, (ULONG)(sizeof(WCHAR)*%ls_Len_)); // Blob containing %ls concatenated nul-terminated strings%ls, (ULONG)(sizeof(WCHAR)*%ls)); (%ls != NULL) ? %ls : L"NULL", (%ls != NULL) ? (ULONG)((wcslen(%ls) + 1) * sizeof(WCHAR)) : (ULONG)sizeof(L"NULL"));%ls, (ULONG)(sizeof(char)*%ls*%ls)); // Blob containing %ls concatenated strings; each string has the same length (%ls)%ls, (ULONG)(sizeof(char)*%ls_Len_)); // Blob containing %ls concatenated nul-terminated strings%ls, (ULONG)(sizeof(char)*%ls)); (%ls != NULL) ? %ls : "NULL", (%ls != NULL) ? (ULONG)((strlen(%ls) + 1) * sizeof(char)) : (ULONG)sizeof("NULL"));%c%ls, sizeof(%ls)%c%ls);GUID%ls, sizeof(%ls)%c%ls);const void*FILETIMESYSTEMTIME %ls, %ls_Len_);(%ls != NULL) ? %ls : (const void*)"\0\0\0\0\0\0\0", (%ls != NULL) ? (8u + %ls->SubAuthorityCount * 4u) : 8);WCHARchar%ls, (USHORT)(sizeof(%ls)*%ls_Len_)); // Blob contains data for %ls chunks; each chunk is a 16-bit ByteCount followed by ByteCount bytes of data.&EventData[%d].Size, sizeof(USHORT)); EventDataDescCreate(&EventData[%d], %ls, (USHORT)(sizeof(%ls)*%ls_Len_));%ls, (ULONG)sizeof(char)*%ls*%ls); // Blob containing %ls concatenated strings; each string has the same length (%ls)%ls, (ULONG)sizeof(char)*%ls);%ls : error : No support for STRUCT in MOF %ls, %ls * %ls_Len_);%ls, %ls_Len_);%ls,sizeof(const void*));NOT_SUPPORTEDsbytebyteshortushortintuintlongulongfloatdoubleboolbyte[]IntPtrDateTimeSecurityIdentifierconst WCHAR*PCWSTRconst char*PCSTRconst unsigned char*const SID*const GUID*const FILETIME*const SYSTEMTIME*reads_(_Arg%d_Len_)reads_(_Arg%dreads_(%d*_Arg%d*%dreads_(_Arg%d)opt_reads_(%d) + 1 // // Template Functions // // // Function for template "%ls" (and possibly others). // This function is for use by MC-generated code and should not be used directly. // #ifndef %ls_def #define %ls_def ETW_INLINE ULONG _mcgen_PASTE2(%ls_, MCGEN_EVENTWRITETRANSFER)( %ls( _In_ PMCGEN_TRACE_CONTEXT Context, _In_ PCEVENT_DESCRIPTOR Descriptor _In_opt_ const GUID* Activity _In_opt_ const GUID* EventGuid _In_ ULONG %ls_Len_ _In_ %ls %c%ls%ls : error : too many properties in template %ls ) { #define %ls_ARGCOUNT %d ULONG Error = 0; EVENT_DATA_DESCRIPTOR EventData[%ls_ARGCOUNT%ls]; typedef struct _MCGEN_TRACE_BUFFER { EVENT_TRACE_HEADER Header; EVENT_DATA_DESCRIPTOR EventData[%ls_ARGCOUNT]; } MCGEN_TRACE_BUFFER; MCGEN_TRACE_BUFFER TraceBuf; PEVENT_DATA_DESCRIPTOR EventData = TraceBuf.EventData; typedef struct _MCGEN_TRACE_BUFFER { EVENT_TRACE_HEADER Header; } MCGEN_TRACE_BUFFER; MCGEN_TRACE_BUFFER TraceBuf; %ls : error : internal error processing template %ls Context-> if (!%lsMcGenPreVista) {ActivityError =return %ls McGenEventWrite(Context, Descriptor, %ls, %ls_ARGCOUNT%ls, EventData);EventData %ls Context->PfnEtwWrite(Context->RegistrationHandle, Descriptor, Activity, %ls_ARGCOUNT, %ls); %ls PfnEventWrite(Context->RegistrationHandle, Descriptor, %ls_ARGCOUNT, %ls); } else { // // Fill in header fields // TraceBuf.Header.GuidPtr = (ULONGLONG)EventGuid; TraceBuf.Header.Flags = WNODE_FLAG_TRACED_GUID |WNODE_FLAG_USE_GUID_PTR|WNODE_FLAG_USE_MOF_PTR; TraceBuf.Header.Class.Version = (USHORT)Descriptor->Version; TraceBuf.Header.Class.Level = Descriptor->Level; TraceBuf.Header.Class.Type = Descriptor->Opcode; TraceBuf.Header.Size = sizeof(MCGEN_TRACE_BUFFER); TraceBuf.Header.FieldTypeFlags = 0; ((PWNODE_HEADER)&(TraceBuf.Header))->HistoricalContext = Context->Logger; %ls IoWMIWriteEvent(&TraceBuf.Header); %ls TraceEvent(Context->Logger, &TraceBuf.Header); } #ifdef MCGEN_CALLOUT MCGEN_CALLOUT(Context->RegistrationHandle, Descriptor, %ls_ARGCOUNT, &EventData[%lc]); MCGEN_CALLOUT(Context->RegistrationHandle, Descriptor, 0, NULL); #endif // MCGEN_CALLOUT return Error; } #endif // %ls_def // Value contains data for %ls strings; each string has length = %ls: if (%ls.Length + 1 < %ls*%ls) return false; userDataPtr[%d].Size = (uint)(sizeof(char)*%ls*%ls); // Value contains %ls concatenated nul-terminated strings (embedded nul between each one - use something like string.Join("\0", array) to generate this value): userDataPtr[%d].Size = (uint)(%ls == 0 ? 0 : sizeof(char)*(%ls.Length + 1)); userDataPtr[%d].Size = (uint)(sizeof(char)*(%ls.Length + 1)); // Value has length = %ls: if (%ls.Length + 1 < %ls) return false; userDataPtr[%d].Size = (uint)(sizeof(char)*%ls); // Value is a nul-terminated string (assume no embedded nuls): userDataPtr[%d].Size = (uint)(%ls.Length + 1)*sizeof(char); userDataPtr[%d].DataPointer = (UInt64)(&%ls); userDataPtr[%d].Size = (uint)(sizeof(byte)%c%ls); userDataPtr[%d].Size = (uint)(sizeof(short)%c%ls); userDataPtr[%d].Size = (uint)(sizeof(int)%c%ls); userDataPtr[%d].Size = (uint)(sizeof(long)%c%ls); userDataPtr[%d].Size = (uint)(sizeof(float)%c%ls); userDataPtr[%d].Size = (uint)(sizeof(double)%c%ls); %ls : error : Not allowed array of bool: PropertyName = %ls is an array of length %ls!!!!! int %lsInt = %ls ? 1 : 0; userDataPtr[%d].DataPointer = (UInt64)(&%lsInt); userDataPtr[%d].Size = (uint)(sizeof(int)); userDataPtr[%d].Size = (uint)(sizeof(Guid)%c%ls); userDataPtr[%d].Size = (uint)(sizeof(IntPtr)%c%ls); %ls : error : Not allowed array of DateTime: PropertyName = %ls is an array of length %ls long %lsFileTime = %ls.ToFileTime(); userDataPtr[%d].DataPointer = (UInt64)(&%lsFileTime); userDataPtr[%d].Size = (uint)(sizeof(long)); short* %lsSysTime = stackalloc short[8]; %lsSysTime[0] = (short)%ls.Year; %lsSysTime[1] = (short)%ls.Month; switch (%ls.DayOfWeek) { case DayOfWeek.Sunday: %lsSysTime[2] = 0; break; case DayOfWeek.Monday: %lsSysTime[2] = 1; break; case DayOfWeek.Tuesday: %lsSysTime[2] = 2; break; case DayOfWeek.Wednesday: %lsSysTime[2] = 3; break; case DayOfWeek.Thursday: %lsSysTime[2] = 4; break; case DayOfWeek.Friday: %lsSysTime[2] = 5; break; case DayOfWeek.Saturday: %lsSysTime[2] = 6; break; default: break; } %lsSysTime[3] = (short)%ls.Day; %lsSysTime[4] = (short)%ls.Hour; %lsSysTime[5] = (short)%ls.Minute; %lsSysTime[6] = (short)%ls.Second; %lsSysTime[7] = (short)%ls.Millisecond; userDataPtr[%d].DataPointer = (UInt64)(%lsSysTime); userDataPtr[%d].Size = (uint)(8 * sizeof(short)); %ls : error : Not allowed array of SecurityIdentifier : PropertyName = %ls is an array of length %ls byte [] %lsBin = new byte[%ls.BinaryLength]; %ls.GetBinaryForm(%lsBin, 0); userDataPtr[%d].Size = (uint)(%ls.BinaryLength); // Value contains data for %ls chunks; each chunk is a 16-bit ByteCount followed by ByteCount bytes of data: userDataPtr[%d].DataPointer = (UInt64)(&userDataPtr[%d].Size); userDataPtr[%d].Size = sizeof(ushort); userDataPtr[%d].Size = (ushort)((%ls == null ? 0 : %ls.Length) * sizeof(%ls)); // Value contains data for %ls chunks; each chunk has length = %ls: // Value has length = %ls: if (%ls.Length < sizeof(byte)*%ls%c%ls) return false; userDataPtr[%d].Size = (uint)(sizeof(byte)*%ls%c%ls); userDataPtr[%d].Size = (uint)(%ls_Len_%c%ls); internal unsafe bool Template%ls( internal bool TemplateEventDescriptor( ref EventDescriptor eventDescriptor int %ls_Len_ %ls%ls %ls ) { int argumentCount = %d; bool status = true; if (IsEnabled(eventDescriptor.Level, eventDescriptor.Keywords)) { byte* userData = stackalloc byte[sizeof(EventData) * argumentCount]; EventData* userDataPtr = (EventData*)userData; %*ls fixed (%ls* Bin%c0 = %ls%ls, %c%d = %ls%ls %*ls { %*ls userDataPtr[%d].DataPointer = (ulong)%c%d; %*ls status = WriteEvent(ref eventDescriptor, argumentCount, (IntPtr)(userData)); %*ls } } return status; } if (IsEnabled(eventDescriptor.Level, eventDescriptor.Keywords)){ return WriteEvent(ref eventDescriptor, 0, IntPtr.Zero); } return true; } } internal unsafe bool TemplateEventDescriptor( ref EventDescriptor eventDescriptor, ref Guid eventGuid int argumentCount = %d; if (IsEnabled(eventDescriptor.Level, (uint)eventDescriptor.Keywords)) { int eventSize = sizeof(EtwNativeMethods.EVENT_TRACE_HEADER)+ sizeof(EventData) * argumentCount; byte* userData = stackalloc byte[eventSize]; EventData* userDataPtr = (EventData*)(userData+ sizeof(EtwNativeMethods.EVENT_TRACE_HEADER)); EtwNativeMethods.EVENT_TRACE_HEADER* header = (EtwNativeMethods.EVENT_TRACE_HEADER*)userData; // // header here // header->Guid = eventGuid; header->Flags = s_eventFlags; // WNODE_FLAG_TRACED_GUID |WNODE_FLAG_USE_MOF_PTR; header->Version = (short)eventDescriptor.Version; header->Level = eventDescriptor.Level; header->Type = eventDescriptor.Opcode; header->Size = (short)eventSize; // // Event data here //%*ls fixed (%ls* %*ls{ %*ls EtwNativeMethods.TraceEvent(m_logger, userData); } return true; } if (IsEnabled(eventDescriptor.Level, (uint)eventDescriptor.Keywords)){ int eventSize = sizeof(EtwNativeMethods.EVENT_TRACE_HEADER); byte* userData = stackalloc byte[eventSize]; EtwNativeMethods.EVENT_TRACE_HEADER* header = (EtwNativeMethods.EVENT_TRACE_HEADER*)userData; // // header here // header->Guid = eventGuid; header->Flags = s_eventFlags; // WNODE_FLAG_TRACED_GUID |WNODE_FLAG_USE_MOF_PTR; header->Version = (short)eventDescriptor.Version; header->Level = eventDescriptor.Level; header->Type = eventDescriptor.Opcode; header->Size = (short)eventSize; EtwNativeMethods.TraceEvent(m_logger, userData); } return true; } TraceIsEnabledBCryptOpenAlgorithmProviderMicrosoft Primitive ProviderMD5BCryptCreateHashBCryptHashDataBCryptFinishHashunsigned charBYTEsigned intINTunsigned intUINT32signed __int64LONGLONGunsigned __int64ULONGLONGbooleanDOUBLEFLOATHSTRING[in, size_is(%ls)] _In_reads_(%ls) [in, size_is(%d)] _In_reads_(%d) [in] _In_ [version(NTDDI_WIN8), uuid(%ls)] interface I%ls : IInspectable { class %lsServer : public Microsoft::WRL::RuntimeClass<I%ls> { InspectableClass(RuntimeClass_%ls_%ls, BaseTrust); public: } // namespace %ls [propget] HRESULT %ls%ls%ls([out, retval] boolean* value); IFACEMETHOD(get_%ls%ls%ls)( _Out_ boolean* value) override; IFACEMETHODIMP %ls::%lsServer::get_%ls%ls%ls( _Out_ boolean* value) { *value = EventEnabled%ls(); return S_OK; } HRESULT %ls%ls(%ls%c %ls IFACEMETHOD(%ls%ls)( ) override; if (!EventEnabled%ls()) { return S_OK; } ULONG _MCGEN_StringLength%d; LPWSTR _MCGEN_Buffer%d = NULL; Counted _MCGEN_StringLength%d = GetStringArraySize(%ls, %ls); _MCGEN_Buffer%d = AllocateAndFillBuffer%ls(_MCGEN_StringLength%d * sizeof(WCHAR), %ls, %ls); if (_MCGEN_Buffer%d == NULL) { goto Cleanup; } Cleanup: free(_MCGEN_Buffer%d);WindowsGetStringLen(%ls), WindowsGetStringRawBuffer(%ls, nullptr)WindowsGetStringRawBuffer(%ls, nullptr)_MCGEN_StringLength%d, _MCGEN_Buffer%d IFACEMETHODIMP %lsServer::%ls%ls( { %ls%ls(%c%ls return S_OK; } namespace %ls { ActivatableClass(%lsServer) } [version(NTDDI_WIN8), activatable(NTDDI_WIN8)] runtimeclass %ls { [default] interface I%ls; }%ls : error : Property %ls from event %ls is fixed count, which is not supported by WinRT. %ls : error : Property %ls from event %ls has a specified length, which is not supported by WinRT. %ls : error : Property %ls from event %ls is not supported type for WinRT. import "oaidl.idl"; import "Inspectable.idl"; import "Windows.Foundation.idl"; #include #include <wrl\implements.h> #include <wrl\module.h> #include "%ls.h" #include "%ls.h" #include "%ls.hpp" STDAPI DllGetActivationFactory(_In_ HSTRING activatibleClassId, _COM_Outptr_ IActivationFactory** factory) { auto &module = Microsoft::WRL::Module::GetModule(); return module.GetActivationFactory(activatibleClassId, factory); } HRESULT WINAPI DllCanUnloadNow() { auto &module = Microsoft::WRL::Module::GetModule(); return module.GetObjectCount() == 0 ? S_OK : S_FALSE; } HRESULT WINAPI DllGetClassObject(_In_ REFCLSID rclsid, _In_ REFIID riid, _Outptr_ LPVOID FAR* ppv) { auto &module = Microsoft::WRL::Module::GetModule(); return module.GetClassObject(rclsid, riid, ppv); } /// IdentifierNameIsMisspelled %ls.man : error : Provider %ls does not have namespace attribute. %ls.man : error : Namespaces %ls and %ls do not have common root namespace namespace %ls }; MS-GenEtw-WinRTTemplate })(this); BOOL __stdcall DllMain ( _In_ HINSTANCE Module, _In_ DWORD Reason, _In_opt_ PVOID Reserved ) { UNREFERENCED_PARAMETER(Reserved); if (Module == NULL) { return FALSE; } switch (Reason) { case DLL_PROCESS_ATTACH: EventRegister%ls(); EventSetInformation(%lsHandle, EventProviderBinaryTrackInfo, NULL, 0); break; case DLL_PROCESS_DETACH: EventUnregister%ls(); break; } return TRUE; } #pragma warning(disable: 4505) // unreferenced local function has been removed #define LIMIT_RAW_LENGTH(RawLength) (RawLength < 0x7f00 ? RawLength : 0x7f00) static ULONG GetStringArraySize ( _In_ unsigned int StringsCount, _In_reads_(StringsCount) HSTRING* Strings ) { ULONG TotalSize = 0; for (ULONG Ix = 0; Ix < StringsCount; Ix += 1) { UINT32 RawLength = WindowsGetStringLen(Strings[Ix]); TotalSize += LIMIT_RAW_LENGTH(RawLength) + 1; } return TotalSize; } static LPWSTR AllocateAndFillBuffer ( _In_ ULONG BufferSize, _In_ ULONG StringsCount, _In_reads_(StringsCount) HSTRING* Strings ) { LPWSTR Buffer = static_cast(malloc(BufferSize)); ULONG Offset = 0; if (Buffer) { for (ULONG Ix = 0; Ix < StringsCount; Ix += 1) { UINT32 RawLength; PCWSTR RawString = WindowsGetStringRawBuffer(Strings[Ix], &RawLength); ULONG Length = LIMIT_RAW_LENGTH(RawLength); RtlCopyMemory(Buffer + Offset, RawString, Length * sizeof(WCHAR)); Offset += Length; Buffer[Offset] = L'\0'; Offset += 1; } } return Buffer; } static LPWSTR AllocateAndFillBufferCounted ( _In_ ULONG BufferSize, _In_ ULONG StringsCount, _In_reads_(StringsCount) HSTRING* Strings ) { LPWSTR Buffer = static_cast(malloc(BufferSize)); ULONG Offset = 0; if (Buffer) { for (ULONG Ix = 0; Ix < StringsCount; Ix += 1) { UINT32 RawLength; PCWSTR RawString = WindowsGetStringRawBuffer(Strings[Ix], &RawLength); ULONG Length = LIMIT_RAW_LENGTH(RawLength); Buffer[Offset] = static_cast(Length * sizeof(WCHAR)); Offset += 1; RtlCopyMemory(Buffer + Offset, RawString, Length * sizeof(WCHAR)); Offset += Length; } } return Buffer; } <ActivatableClass ActivatableClassId="%ls.%ls" ThreadingModel="both"/>TraceProvider.dll <!-- Place this XML fragment into your AppX manifest file. --> <Extensions> <Extension Category="windows.activatableClass.inProcessServer"> <InProcessServer> <Path><!-- Place DLL name here. E.g. %ls --></Path> (function init%ls(global) { var providerTemplates = null; var ns = global; if (ns.Diagnostics === undefined) { ns.Diagnostics = {}; } var ns = ns.Diagnostics; if (ns.Tracing === undefined) { ns.Tracing = {}; } var ns = ns.Tracing; if (ns.%ls === undefined) { ns.%ls = {}; } var ns = ns.%ls; ns.%ls = function () { if (providerTemplates === null) { providerTemplates = new global.%ls.%lsTemplate(); } }; var proto = ns.%ls.prototype; [version(NTDDI_WIN8), uuid(%ls)] interface I%lsTemplate : IInspectable { static PCEVENT_DESCRIPTOR _MCGEN_EventDescriptorArray[%Iu]; PCEVENT_DESCRIPTOR %lsTemplateServer::_MCGEN_EventDescriptorArray[%Iu] = { &%ls HRESULT EventEnabled([in] UINT EventIndex, [out, retval] VARIANT_BOOL* Enabled); static const UINT _MCGEN_EventEnabledBitArray[%Iu]; IFACEMETHOD(EventEnabled)( _In_ UINT EventIndex, _Out_ VARIANT_BOOL* Enabled) override; const UINT %lsTemplateServer::_MCGEN_EventEnabledBitArray[%Iu] = { %u #define _MCGEN_IS_%ls_ENABLED(i) (0 == (%lsEnableBits[_MCGEN_EventEnabledBitArray[i] >> 5] & (1 << (_MCGEN_EventEnabledBitArray[i] & 0x1f)))) %lsTemplateServer::EventEnabled( _In_ UINT EventIndex, _Out_ VARIANT_BOOL* Enabled ) { if (Enabled == NULL) return E_POINTER; if (EventIndex >= %Iu) return E_INVALIDARG; *Enabled = (_MCGEN_IS_%ls_ENABLED(EventIndex) == S_OK) ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } HRESULT Trace%ls([in] UINT _MCGEN_EventIndex IFACEMETHOD(Trace%ls)( _In_ UINT _MCGEN_EventIndex%lsTemplateServer::Trace%ls( _In_ UINT _MCGEN_EventIndex if (_MCGEN_EventIndex >= %Iu) return E_INVALIDARG; if (_MCGEN_IS_%ls_ENABLED(_MCGEN_EventIndex)) return S_OK; %ls(&%ls_Context, _MCGEN_EventDescriptorArray[_MCGEN_EventIndex], %c%ls proto.is%lsEnabled = function () { return !!providerTemplates.eventEnabled(%Iu); }; proto.trace%ls = function () { providerTemplates.trace%ls(%Iu };%ls :ERROR %d: corrupt baseline binary resource win:EventlogClassicwin:UnicodeStringwin:AnsiStringwin:Int8win:UInt8win:Int16win:UInt16win:Int32win:UInt32win:Int64win:UInt64win:Floatwin:Doublewin:Booleanwin:Binarywin:GUIDwin:Pointerwin:FILETIMEwin:SYSTEMTIMEwin:SIDwin:HexInt32win:HexInt64Unrecognize typexs:stringxs:dateTimexs:bytexs:unsignedBytexs:shortxs:unsignedShortxs:intxs:unsignedIntxs:longxs:unsignedLongxs:floatxs:doublexs:booleanxs:GUIDxs:hexBinarywin:HexInt8win:HexInt16win:PIDwin:TIDwin:Portwin:IPv4win:IPv6win:SocketAddresswin:CIMDateTimewin:ETWTIMEwin:Xmlwin:ErrorCodeunknown type <data inType="%ls" outType="%ls" name="%ls" count="%d" count="%ls" length="%d" length="%ls" map="%ls" /> <struct name="%ls"> </struct> <template guid="%ls"> </template> <event channel="%ls" keywords="%ls" level="%ls" opcode="%ls" task="%ls" value="%d" version="%d" notLogged="true" template="%ls" /> : error ::ERROR:%ls %ls Event Id %d from provider %ls has been removed from manifest %ls %ls Event Id %d found, but version %d NOT FOUND - provider %ls %ls %ls Event Id %d version %d - provider %ls Template properties have been removed from baseline Create new event Id to solve problem, leave old event in manifest %ls %ls Event Id %d version %d - provider %ls Template properties have been reordered, keep original ordering to preserver application compatibility. If this change is intentional and required, increment the version number of this event %ls %ls Event Id %d version %d - provider %ls Template property %ls has been renamed, create new event Id to solve problem, leave old event in manifest %ls %ls Event Id %d version %d - provider %ls Template properties do not match. Increment Version of the Event to solve problem and keep old event in manifest %ls %ls Event Id %d version %d - provider %ls Template Added - : Increment Version of the Event to solve problem %ls :ERROR %d: corrupt baseline binary resource %ls .BINGetManifestData: Failed at validation with Error 0x%x bЅ;t@@FF001050000009`if o f o f o f o f o PY )E`aKRpp  < < > L M M Q T b c   < < > > ? ? @ B G H K M p q   < < > C G H K M V W   > D F H J M U V   > C F H J M W W 114:GN557799>>??q *0/00000N00!0)0AZaz14>AHJ~P OQ\^1VYYa!:AJq 9 = = X a     ( * 0 2 3 5 6 8 9 Y \ ^ ^ r t     ( * 0 2 3 6 9 = = \ ] _ a     ( * 3 5 9 ` a     ( * 9 ` a .0023@E@GIi    <<>>@@LLNNPPTUYY_acceeggiimnrsuu EHMPWYY[[]]_}&!&!*!+!.!.!!!A00001,1< &:] ]< "&:"$/!U?K $ >" >"/! >" !#$=&# '2"*& ""&v<  '"&< #@= =; " xF09C 09C; " 09FafFAFF; " M MP "P $?SP >Q-X[c -Z -]Z -_[>" Ce Dg Ai Tk Am [o ]ro ]tp> "p#|y y;* " x09 09;* " 09afAF;* " # ;2 " x09 09;2 " 09afAF;2 " ""&v"< *$'"&"< 2$]> ]gtltampaposquot9w?HC [0123456789abcdeftruefalse<//>&amp;&lt;YE:ш/v;7ObjectLengthMS-WEVTY(6CS>;l=|PFailed to open file for write: '%ls'Failed to create FileMapping for '%ls'Failed to map view of file for '%ls'Arithmetic overflow expanding file: '%ls'Debugchannelproviderwin:NoneSYSTEMSECURITYAPPLICATIONfilterkeywordlevelmapopcodeen-UStask&quot; Name=""><EventData__binLengthBinaryComplexDataData</EventData>urn:schemas-microsoft-com:asm.v3accessattributeschidcontrolGuidcountculturedefaultenabledeventGUIDformatgroupGuidguididincludeNameisolationkeywordslengthmaskmessagemessageFileNamemofValuenamenamespacenotLoggedparameterFileNameresourceFileNamesourcesuppressProjectionsymboltagstemplatetidtypevalueversionwarnOnApplicationCompatibilityErrorxmlTypeInvalid value "%ls", expected UInt8.Invalid value "%ls", expected UInt16.Invalid value "%ls", expected UInt32.Invalid value "%ls", expected HexInt32.Invalid value "%ls", expected HexInt64.Invalid value "%ls", expected $(string.*) or $(mc.*).Invalid value "%ls", expected 0, 1, true, or false.Invalid value "%ls", expected {GUID}.eventsmessageTableXmlWbemInvalid value "%ls", expected Xml or Wbem.channelslevelstasksopcodesmapsnamedQueriestemplatesfilterstraitsimportChannelAdminOperationalAnalyticInvalid value "%ls", expected Admin, Operational, Analytic, or Debug.SystemCustomInvalid value "%ls", expected System or Custom.valueMapbitMappatternMapspatternMapdatastructbinaryUserDataeventresourcesstringTabletypesxmlTypesinTypesdescriptionGenSumResource.BINcategory.DevicesDevicescategory.DiskDiskcategory.NetworkNetworkcategory.PrintersPrinterscategory.ReservedReservedcategory.ServicesServicescategory.ShellShellcategory.SystemEventSystem Eventchannel.Applicationchannel.ProviderMetadataProviderMetadatachannel.SecuritySecuritychannel.Systemchannel.TraceClassicTraceClassicchannel.TraceLoggingTraceLoggingkeyword.AnyKeywordAnyKeywordkeyword.AuditFailureAudit Failurekeyword.AuditSuccessAudit Successkeyword.ClassicClassickeyword.CorrelationHintCorrelation Hintkeyword.ResponseTimeResponse Timekeyword.SQMSQMkeyword.WDIDiagWDI Diaglevel.CriticalCriticallevel.Errorlevel.InformationalInformationlevel.LogAlwaysLog Alwayslevel.VerboseVerboselevel.Warningopcode.DCStartDCStartopcode.DCStopDCStopopcode.ExtensionExtensionopcode.InfoInfoopcode.ReceiveReceiveopcode.ReplyReplyopcode.ResumeResumeopcode.SendSendopcode.StartStartopcode.StopStopopcode.SuspendSuspendtask.NoneNoneWINEVENT_CHANNEL_GLOBAL_APPLICATIONWINEVENT_CHANNEL_PROVIDERMETADATAWINEVENT_CHANNEL_GLOBAL_SECURITYWINEVENT_CHANNEL_GLOBAL_SYSTEMWINEVENT_CHANNEL_CLASSIC_TRACEWINEVENT_CHANNEL_TRACELOGGINGwin:CriticalWINEVENT_LEVEL_CRITICALwin:ErrorWINEVENT_LEVEL_ERRORwin:InformationalWINEVENT_LEVEL_INFOwin:LogAlwaysWINEVENT_LEVEL_LOG_ALWAYSwin:ReservedLevel10WINEVENT_LEVEL_RESERVED_10win:ReservedLevel11WINEVENT_LEVEL_RESERVED_11win:ReservedLevel12WINEVENT_LEVEL_RESERVED_12win:ReservedLevel13WINEVENT_LEVEL_RESERVED_13win:ReservedLevel14WINEVENT_LEVEL_RESERVED_14win:ReservedLevel15WINEVENT_LEVEL_RESERVED_15win:ReservedLevel6WINEVENT_LEVEL_RESERVED_6win:ReservedLevel7WINEVENT_LEVEL_RESERVED_7win:ReservedLevel8WINEVENT_LEVEL_RESERVED_8win:ReservedLevel9WINEVENT_LEVEL_RESERVED_9win:VerboseWINEVENT_LEVEL_VERBOSEwin:WarningWINEVENT_LEVEL_WARNINGWINEVENT_TASK_NONEwin:DC_StartWINEVENT_OPCODE_DC_STARTwin:DC_StopWINEVENT_OPCODE_DC_STOPwin:ExtensionWINEVENT_OPCODE_EXTENSIONwin:InfoWINEVENT_OPCODE_INFOwin:ReceiveWINEVENT_OPCODE_RECEIVEwin:ReplyWINEVENT_OPCODE_REPLYwin:ReservedOpcode241WINEVENT_OPCODE_RESERVED_241win:ReservedOpcode242WINEVENT_OPCODE_RESERVED_242win:ReservedOpcode243WINEVENT_OPCODE_RESERVED_243win:ReservedOpcode244WINEVENT_OPCODE_RESERVED_244win:ReservedOpcode245WINEVENT_OPCODE_RESERVED_245win:ReservedOpcode246WINEVENT_OPCODE_RESERVED_246win:ReservedOpcode247WINEVENT_OPCODE_RESERVED_247win:ReservedOpcode248WINEVENT_OPCODE_RESERVED_248win:ReservedOpcode249WINEVENT_OPCODE_RESERVED_249win:ReservedOpcode250WINEVENT_OPCODE_RESERVED_250win:ReservedOpcode251WINEVENT_OPCODE_RESERVED_251win:ReservedOpcode252WINEVENT_OPCODE_RESERVED_252win:ReservedOpcode253WINEVENT_OPCODE_RESERVED_253win:ReservedOpcode254WINEVENT_OPCODE_RESERVED_254win:ReservedOpcode255WINEVENT_OPCODE_RESERVED_255win:ResumeWINEVENT_OPCODE_RESUMEwin:SendWINEVENT_OPCODE_SENDwin:StartWINEVENT_OPCODE_STARTwin:StopWINEVENT_OPCODE_STOPwin:SuspendWINEVENT_OPCODE_SUSPENDwin:AnyKeywordWINEVT_KEYWORD_ANYwin:AuditFailureWINEVENT_KEYWORD_AUDIT_FAILUREwin:AuditSuccessWINEVENT_KEYWORD_AUDIT_SUCCESSwin:CorrelationHintWINEVENT_KEYWORD_CORRELATION_HINTWINEVENT_KEYWORD_EVENTLOG_CLASSICwin:ReservedKeyword49WINEVENT_KEYWORD_RESERVED_49win:ReservedKeyword56WINEVENT_KEYWORD_RESERVED_56win:ReservedKeyword57WINEVENT_KEYWORD_RESERVED_57win:ReservedKeyword58WINEVENT_KEYWORD_RESERVED_58win:ReservedKeyword59WINEVENT_KEYWORD_RESERVED_59win:ReservedKeyword60WINEVENT_KEYWORD_RESERVED_60win:ReservedKeyword61WINEVENT_KEYWORD_RESERVED_61win:ReservedKeyword62WINEVENT_KEYWORD_RESERVED_62win:ReservedKeyword63WINEVENT_KEYWORD_RESERVED_63win:ResponseTimeWINEVENT_KEYWORD_RESPONSE_TIMEwin:SQMWINEVENT_KEYWORD_SQMwin:WDIDiagWINEVENT_KEYWORD_WDI_DIAGNoPrintReducedStringCIMDateTimeCodePointerDateTimeCultureInsensitiveDateTimeUtcETWTIMEErrorCodeHResultHexInt16HexInt32HexInt64HexInt8IPv4IPv6JsonNTSTATUSPIDPkcs7WithTypeInfoPortSocketAddressTIDUtf8Win32ErrordateTimehexBinaryunsignedByteunsignedIntunsignedLongunsignedShortAnsiCharAnsiStringBooleanCountedAnsiStringCountedBinaryCountedStringCountedUnicodeStringDoubleFloatHexDumpInt16Int32Int64Int8NonNullTerminatedAnsiStringNonNullTerminatedStringPointerReverseCountedAnsiStringReverseCountedStringSIDSizeTUInt16UInt32UInt64UInt8UnicodeCharUnicodeStringWBEMSidtrace:ReducedStringtrace:NoPrinttrace:CountedStringtrace:ReverseCountedStringtrace:ReverseCountedAnsiStringtrace:NonNullTerminatedStringtrace:NonNullTerminatedAnsiStringtrace:UnicodeChartrace:AnsiChartrace:SizeTtrace:HexDumptrace:WBEMSidCreateXmlReader failedGetNodeTypeGetQualifiedNameGetNamespaceUriGetLocalNameGetValueOpenInputFileMoveToFirstAttributeMoveToNextAttributeReadFirstChildNextChildCreateXmlWriterOutputWithEncodingCodePageCreateXmlWriterLiteSetProperty(ByteOrderMark)SetProperty(ConformanceLevel)SetProperty(OmitXmlDeclaration)SetOutput(AppendStream)WriteNodeFlushinstrumentationManifestassemblymetadatalocalizationinvalid string position yrp@=iK 0Ɣ$J-p7B~\\7B~ H||7B~$Ķ7B~*o J_@FE}R Q z   ;!k!!!1"v""";#k###7$$$$4%~%%%0&`&&&'J'z'''=(w(((#)e))) *9*s***(+X+++,`,,,-Y---.R...!/[///0|00 1P1111?2222B3|33374444(55556L6|666 7I7|777=88889N999:1:::';W;;<><a<<<<<=H=x===>L>|>>>>7?o????@M@}@@@ AܾP,0y  -       L,TH? TWRSDSof%̋hU<;I}mc.pdbGCTL.rdata$brc'.rdata$r$brc).CRT$XCA).CRT$XCAA)d.CRT$XCU *.CRT$XCZ$*.CRT$XIA(*.CRT$XIAA,*.CRT$XIAC0*.CRT$XIC8*.CRT$XIZ<*.CRT$XPA@*.CRT$XPZD*.CRT$XTAH*.CRT$XTZL*.gfids,.rdata.rdata$sxdataľ.rdata$voltmd\.rdata$zzzdbg.rtc$IAA.rtc$IZZ.rtc$TAA.rtc$TZZP.text$diP_O.text$mn+.text$x0A.text$ydB*.xdata$xp0.data$brc0p.data$r$brcLq4.data$rs$brcq.datasF.bss.idata$5.00cfg.idata$2p.idata$3.idata$4 .idata$6.rsrc$01XJ.rsrc$02 of%̋hU<;I}: Iyd eR7B~߀h0AGY@Yh@AG9@YhPAG@Yh`AG?YhAG?YhAG?YhAG?YhAGy?YhAGY?YhAG9?YhAG?YhBG>Yh BG>Yh0BG>Yh@BG>YhPBGy>YhpBGY>Yh`BG9>Yj(a@$BG@@f@ \yG=YhBG=YhBG=YhBG=YhBG=YjDY^hBG@@f@ dyGN=YhpGHhBG.=Y̋UaaEA 4@]̋UVF@P3HEYt jV:YY^]̍A@PGY̋UVjVHt^Vh,@jGYPbJ Mj =hlGP(I̋UVuWV4@F G _^]̋UVF@ `PEP9GYY^]̋UVF@PGEYt j V8YY^]̃y8,@EA@aàyt 1HY̋VW ;u_^̋UkU Mb]̋UQVW}7t;S_;tj_f;u}G+jYk3GG[_^́rVq#+΍Aw ^RQ7YYhH̋VVvUf3Ff^̋SV3۾pyGSjL,@lyG8Sjp,@8Sj,@7Sj,@7Sj,@7Sj,@7Sj,@7Sj-@7Sj-@7Sj0-@7SjH-@7^[hGnI5qG3ۍM؃=qGqGGqGP! EqG+E9qGu PuE+Eu ht-@( qG+=qGjGqGh|-@QPQpM| ]Eԃ}xrGuGEԋP: MM0hqGrGM j.E VMEM=DrG0rG5@rGG0rGPPMEԾrGPMMMMhqGrGM? h-@EMPHrG4MmMMahqGrGth-@EMPrGM#t3(yG=4yG-@fxyG-@EtyG=qGqGj G qGPQH ,yGuh-@jYY=vGt1=rGQGxrGTyGPt=rGG=xrGWcj_9=,rGQGrGDyGPt9=,rGG5rG19=\rGHrGGHrGQPLyGot+9=\rGG5HrGVh-@jh 2n F ̡,yGtPH%,yG%tyG3YfxyG̋VVHt t PVH^̃=TyGSVj^t@TyG u95rGxrGGxrGPH95rGxrGG xrG=DyGt@DyG6 u95,rGrGGrGPH95,rGrGG rG?=LyGt'LyG u95\rGHrGGHrGPH^[95\rGHrG^G HrG[̋US]VWtaHYtf>xGAWHYuhj_Xf;t`j=Xf;j(Xf;j)Xf;j:Xf;j+Xf;t ;tHftxG3f8EUxGJj^5tyG5xG(wG%tyG!jj jjjf3fFXxG_^̃y̋UQE W;Gw+SVv4GVuSUB 3f^[ uuP{_̋UUVrffu+RuJ^]̋US;]t%VW-EjY`3_@f^[]̋UQU VFN+;w1~SW^v>Pu OQA 3f__[RuuR%^̋UQQSVu3W}Nff;u+VulP(_^[̋UQQSVuWJ+}^;r(zv~v6SVQRQu7_^[ ̋UQQVuWwYGSVEcUE0M؉wVuOSn@3 fEvEi[_^ ̋U UWO+M;GSV4EVUEM؋EOw  UUƒ}EQ4v:7VS?M Puu?E3Ƀf C΋EEWS?Vuu?E3f C^[_̋UQEVu r fx:uPpQA A;tLSj/[E\W0.tf;t*f;ut$;u A 0f;t f;ut;u_[A^̋UQQ;QsyBAv fEfQ3fDQ uuQ̋UQSVuW3jYEcc;v, ;w j Z;‹BʍUMME;s4VuKW&> >u6PuQ>E3fG_^[̋U WO+MGSVqEVUEb}؋MOMw4 v87 PVS=U fE f3fD΋EEVWS`=fE f3fD^[_ ́r(A#;P9-Yȅt A#H%hHtQ-Y3̃aaA.@,@̋UVu,@^]̋UVuP @^]̋U MxhLlGEP7̋Vw ^̋UVuWy;wϋ+;w ϋ;B_^]̋UVW3jYEbb`3@_f^]̹.@I̋UQUSVWM3_ff;u+yu,ޅtI1ZPHYYf;t MCU;u#1WjRH;tTH0D_^[̋UtLwDVW}++tft fuҍA_E3Ʌ^fzEWt3f]̋V~t6HYtTHD3&F^̋UVWFtt.@ .@.@jPuH uTHD~S^t 6HY^3F>[_^]̃yv ̋V5wG3WGDtB@;FuB?u)GjHYt"NJNJr6u_^h/@jYY2̋Vq 3ҋ…tIfUI}MGM}uG3RRRRuQRPHC 6K Mu=;yGt#s{j.uVWhd0@P0}US uUG>s,F;C(NW U}MGM}uG3RRRRuQRPHuEjjPO}fMMffMHE9|s%W}WHYYEM}|}M}UGU}tE@jjQWuRjPHuujWHMEM+tuxQjPH}6=;yGt$uHj,Vuh0@PJ/uH}Yt}EGEPH}MGME#]M{Mst=vGtSH}Yd0Ã}EGEPh/@jWHuH%}EGEPh-@jb}WHMM9j|oGM0x|2ۃ=G]h`rGMe}33eEfE@E5 wGu@~'Q5prGMv Mh/@M}MءprGGMjh/@AEGEPH }=;yGt$}ujGu*Vh/@P^-uN PQh0@hLyG=vGSt(=rGrGGrGPh,0@hLyGhL0@hLyG GeE3W@jPEPHkG GЉUCECE3W@Uj PEPH{3C EtXȉEGM;CwHOVu֋K 3@EMEȉK ?MMu=;yGt#s{j=)uVWhd0@P,uUS }U4G{G;COV@UEujE%fE3@PfEҍEPHMȍUuɋ}QGU3@PRHM E+tu3Q@P|PHu?TB=;yGt$uHj-(Vuh0@P*uH]Yt}EGEPH}MGMuEM(M x=vGt,Ã}EGEP3@h-@PB MM2̋UEQ;wyv V3f4A^ +QP]̋UQSVW3j}ccXw9Gv?wKC;w s.VUEMK uQWPs- _^[̋UQыMWBz+;w0zSVZv2<~t 3f3f^^[ QQuQW_̋US]VuWVu SA-U< t 3fE3_^f C[]̋U SVWM_+;rdG4 VωEUE}MQuEwOSv7VPZE΍EWP@E_^[̋UEPEu 0M' yTHD]3]c̋UVWqG4Ph0@j %YP' VWj$YP' h(.@j$YP'YYj MhlGPz&j,G)3f9yVMEԹ\yGPEP}8_ uWM~y=\yGM;=\yGt ֹ1@7VMEԉ]PEPMu(3ҹ0@ֹ0@̀=qGSVWKqG=vGDyGQQċtX1@@w 5@@#QQċ8@@" =wG8@8@) t!w=:yGw DPV8@?uQQċ9@@%=wG) t!w=:yG8@w DPV?uQQċ89@@g=vGtEQQľTyG@9@@A=qGqGGqGP5pGh9@V-_^[̋VWQQċDyGt:@@F tPhx:@vh:@W QQċ;@@_^̋UĹGSVW;ȹGt K tOQQľDyG ;@@hC =vGtPP5pGh$;@hTyGN=sGst =sGrG;@GrGP\;@=sGt)5pG;@<@=9yGs DPV!=9yGl<@s D<@DPV{tsh<@V j _j V=wGwGtwGt@wG;CCʋы2utCE9FueK MtIN Mt?=qGqG5(yGG=qGj YuuuVWh<@Pg#uPh<@j1 w ։EuuwG_^[̀=IyGSVWuy3f9tJPPPPjWPwGpH؅~*SHYt3PPSVjWPwGpH2;uA@EPh =@hDyGZVHWh=@hDyG> _^[̋UQSVqGW5vGju*=qGG5qGlYVh,=@P9" 2V=qGG5qGBYVhP=@P"3ۃ C|d$ (wGj^{<tO2%;2ύQff;D$ u+QWrG0\2;2;$wGu 39yG( u 9yG wGPh=@S lyG02j;W2[hӹ wGR2=;*2.hwG%2;2VwG25Y2;2ύQff;D$ u+QWsG=sGsGGsGpG=vGt5pGh>@hTyG _^[]Wh=@. wGPh=@ wGPh=@ wGPhd=@SuX wGPh=@̋QSV^j HYuhX>@j5Y3fF^^^ ^^^ t^t;:2}2m(wGF 2KQ wGwG2-Q wGwGaVHY2^[YÄY22u$wGFF;u!2$wGFFlyG (wGFl wGPh>@j O wGPh=@t h(wGh?@Ѓ~ wGlyGu A@F ~uAF~v vh>@땡wG@ A F 0yGFXQA wGVQ wGPh>@3h>@jVH ~̋USYMV]3W]]X2@Q wGwGtjHYwG@F3^^ ^йGfйG}йGQff;Eu+t j Xf9MιGu>\?@ff;u ftfPf;Qufu3ɋ3Ʌj h?@WH j XPh?@WH }uO3ff;uF +@ǹ;cuË-йG+N {@yGωN t;vPh8@@j- E9N u~ÿ-йG+Ex tp ׋*phh?@WSh?@׋A}uSh?@hDyG 3Qff;u+N K3ɉ tyG3f88yGt.F t'j Yf9 EιGuHF =3fйGF ESHYtJShйGWE ~uE0t[3Qhh@@5h?@jhM~~f^ ]Vuܹ\yGuMA'̋UVW}pg7G#U N7yyv33w6@G~ t׋_^]̋UUz uM 6x2]̋USW} ـ u+VwˋuO?1j(Z t^_[]̋VNtN^tj(Z̋UAESVuF;u3ssF } u p;Cu s0;u3FWGP;u7PRz t1;xuWG@ G@@ GpHz u@ B G@@ Gx(;8uWUG@ G@@ GpGx hC_@ ^[] ̋Itj(Z̋UVuBBx upFB;puPF;puPrV^]̋UUVrBx uPBF;PupB;u0pr^]̃zVWzvyqv ;BPty _^;rw2̋UVu3t"S+W<f;u u@_[^]̹dA@J%̋UQS] VWw`jXG4;wVu_W. 3f>4SUEM7_O<WuV 3f7_^[5̋USVWwz΋f8tu3WɋEЋ+#tQ΍{+t(+}+t4ft f2HuBE3f3ɺzEW_^[]̋UE Vt==w6S]3WxEPuWScx;wu z3f{_[WtM3f^]̋U1uHYYf;uTHD3]̋UqG3ʼnES]V3Wz} u 2WjSrofMDfMDfMDfM;u2PjPH=+;s׋΃t@fMDfMDfMDfM;u;tfMA;u0WjPH;tTH0DM_^3[E̋UQQSVWщU2tFWPHYYtNuu3ۍQff;u+AEEPHYuPhB@HM 3_^[4̋VWPHYj__uf9>u0ft QHYuf9>ufu_^2̋UQSV3ۉEWt wPHYtF;uuf,Uj,GEY@E E(Z@E9EZ@E53ۉ]]ȉ]ԋphEԉE̍EEPQH֋й [@M,uԍNff;u+}w7Vu?.u E;u}t uHhGủ|3j(}},Y@@f@ E}MЋ [@@EdEl3T]@jMԉtXfl3El0}̋uWH֋й|]@}t uH}t uHeUM[@EMVE0uH׋й]@f}t uHME*Eeq MQPH֋й]@$}udE̍UM8\@EM(VE0uH׋й]@}t uHME*]@M]@EM3}ث33uEfEE j(uu>Y@@f@ EuűuUMx$uU̍ EW]@EMGWE0VuԋH֋й]@}t uH >)eehMDhMDjjLEPMu̍Uԍ4x$@0EȉuЉDEMȃetQpH֋uЍ@EPh`k@WH֍@E(ֹ,^@'fLuȋt LPHLPuVH׋й@^@f\uȋt \PH\PuVH׋йT^@LujXf9C~0@EF3ȉEQff;u+QMQM(PWEPM&)EPpPM*@x u#x$HvHp Quu0j hh^@M:uMu}U؍MGU}uUPEuVH׋й^@E&M3 EPPM*Mp&E}t uHu3lu;MDEVjjLP-M"&M&}ԉ}VhMDjjLEPu̍Uԍ4x$PVEH׋й^@4&}ԅ hMDjjLEPM%M%M%My%ME /3j(uuY@@f@ EuűuUMx$RPVEH׋й]@Mc%uM$M$ME 9uuȍUPEuVH׋й^@E$Mt 'EP,PM(0j$Z@h(Z@hY@u|h^@PM}t uH}t uHM#Mj l7hlGP"̋QVj\^tyvDPf;t /tVr^̋SVWFHBك~vSPhH_@HQ;r GPW|_^[̋Uu$U u uQuMuug] j@GmUԋ3}ثj[3e]fE!ERHHU~;QGW9^v9]MjGMPGPjuQH;v3Q{W~v}EjGEQSjuPH؅t&;w"QSS!tjWMqhlG(uԋ3MPMGhlGP2̋UE Vxr3ɋ;@t&FuEX_@jf9E9uVh_@d8GE4@WX_@f9jEVuWh`_@P_R}u*EX_@jf8EuVh_@P"uuuuh_@jYPz^]̋UUVWE30@E;S~,FEvE~Ƌ^(]uvE=8yG@u]jOYM#`ȋEKHFKM MQHYuȋE@MЉEڹ=8yGuUMh_@E @yGCEC t;vQh8@@jY u0;u[E8_^̋UQQWE;SVp~Duy~@tsUj bYM"F@؃bb bJwGBfB5wGt ;FvwG ;Xr2ȋu;t wGwGM?!E;k^[3_Ëjx@GzU5wG}33ɫM3MEfEMjh_@~ Mt v Beh_@6FM3E uEB0fEuQEPQM*EE}MuGEPV3MEKj)M F}}EEG}EFHQQԍAE ff;Eu+MuJ|UWńUEz;zt  B PW%3|E)6M諥hG hM]}M 33҉x|3UEfEU sGE8;yGȹG5ĹGE;t0~vjSh_@PjX;uu֋x=LsG8sGjG58sGVh `@PP=4sGjG5 sG_Vh$`@P- 3҉lptlE @*E=0sGt4=LsGM8sGG8sG=4sGPG sGMK{ t- 4sG߃QG= sG@G sGWa 65ĹGu~vE3؉E]}E ȹG+ƉM}Et,=?vEPM ȹG}]5ĹGM;t;~vE;}t }EPWM!}MjX;uȋ]=4sGl sGG sG+QRQ@PSu;tD=LsGM38sGG8sGPwE΋UoME;uuME]3Qff;u+QSME+E䋵|PuͬPsGhrG=vGrGDƃxHvQPZh/@=;yGt,=dsGjG5PsGVh@`@P|`+\rc=dsG@vGG=PsGWy>jSh``@PP@l%M象2TxɃ=DyGt"DyG萳=,rGrGG rG跥=qGqGuV}MrGVj.EVMEM=DrG0rG5@rGG0rGPPM躱EPM諫MMܠMEРrGMyyuW\j.E胮VM]EM؃=DrG0rG5@rGG0rGPsPM.EPMMXMPMED=LyGWrGMҫh-@E MwHrGPȪMME=\rGQGHrGLyGPt#=\rGG5HrGVh-@j xE}GEYA@ *h3f9tЍ@@l"MNjVh`@PMjWhlGPjj,G<ڋ MeQWMMy*=;yGWVhPa@j_YP2MU+©t.SMyWhxa@j#YP ZMU+3tG ԹH; عHt4 ԹH ԹH4QG ԹHECU+;r3MP jhGGEeE3@ËeEEMd Y_^[jh FG X33jZ\3fM3fE3Qff;u+QVD脪L+Djha@jha@VG3D3ɉRfh0@`=;yGt1jGTYVha@P!` hG3RRRQRPHu'jGYVha@G3ɉfQff;\u+3P0@RQQVDPRj G3ha@PgH VhPH th0a@P4HYYtƅgVHgY=;yGt+jGYVha@P XGu+jGYVhb@Pf hPWH`HtPh$b@jUYP( WH蕚芚3M̋UQVԹH+йHt$thXb@jYPYY^]h8GE 3j_WSH]yWVhb@PdC|3 P j^  3`dfP83HLf8h3x|fhj YEhuA@SH95LsG8sGYG8sGY3ɉHsGjf sG954sG0sGG sGhb@4yGfhƅƅ 9|hGhE0eSSb@GwGwG|GSwGwGSc@Sjc@wGSj_W0c@Sj@c@hxW@h Lc@ wGW\c@xrGVNWVrGBjhdc@0rG1WVrG%WV`rG=qGqGqGGqG3frG=rGrGGrGf5ĹG=ȹG;t苗;uĹGȹG賗u8yG;yG:yG9yGvG@yGjYu 8-t/t f;tAf;t jYftVHYneb?"qt:yG9yGjhc@WHj^Vhc@WHhhc@WHYYuiuut0EjPHEȃ +Whc@jXPuYPV3 @Vhd@WH uƅjYuhd@PHYYuutyȉȀu)h d@jXPYP3 @#jZDˆ IyGQyG YyGjYWhc@jXPuYPW Dž0yG uut:0rGƅjƅXPhc@貞)hc@jXPuYP3Y@YjY2vGau ƅ pqGƅ^ I mtZ60rG @rGjHY;w=DrGG0rGf8.hXd@QAYPYY"VEhd@jXPYP DžgjY+ujhe@WH ufDžqmy6H@yGYH6jXPQVhe@PCMXPhe@WH ufDžVhe@ mrGΉ0jhd@WH uƅ4ƅƅjhd@WH uut{ʍAff;u+vhe@jXPeYP8YYwRh|hGh)hXe@jXPuYP3Y@Y(Xjhe@WH {ƅ$ƅƅh0f@WHYYuƅ _8yGSo %$@DvG4mt{ Aff;u+v hDf@2jPuEPHE EPHE VEhd@mt担rGΉ0[\V`rG emtP0"Pvmt^80V8VHt tjYVhf@jXP+YP <VEhf@jXPhf@WH uƅƅuu ƅ jXPhf@WH uqGƅ ƅPqGƅ B;yG6Gdt;Dt6mkWu sG8sGG4@PHYYt,jFGY;uWhf@Q YP3 @ƆGύQff;u+F(0{ffft/eMuuu*MA@̋U} SVuMW3҈MB3ۉUj\_tEDp/tUf;u]j._9]$tE f98uӉU}EɍHE}$׋HMu 8]tEj:ffXfFEPuVE 4F8]t j\XfEPuVE 4F8]t j.XfE$Pu VM$3fNMQM_^[ ̋U S]VWF++=?Nx+?щ}+;v;?M ЉU ]EF;u"+P6R  5 ;C?wB븋+P6RFM+PSQWuuHE_^[*̋UйH ԹH+SVuW+; عHX+ʋ+;vHMЉUu E ԹHu;u'йH+QPR"} : ;C;wr몋 йH+PQRԹH}+PVOQ йHtعH+уEMأйHȉԹHlj عH_^[茿̋USVW}ߋF++=?N@+E?+;v4?ȉEM E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ !;uV+~EM_ NMȋEN^[a̋VWQ~;BP远~v6~_^̋UuMu!ȅu2 3ҸBI]̋UUWy9} BE P+u9} v_]̋UVW3Effp04_^]̋SVWjWhj@WVHj[;u2jWhj@WVH;jWhj@WVH;jWhj@WVH;jWhj@WVH;t~jWhk@WVH;tjjWhk@WVH;tVjWh(k@WVH;tBjWh4k@WVH;t.jWhDk@WVH;tjWhPk@WVH;t_^[̃9|%H̋VW7t.S_ ;uW+O|3GG[_^̋VWN\|U|0;u_^̋UkU 0M{]̋Vt(VQF+j0Yk0{3FF^̋VN({N{^̋V1tjHV|YY^̋UVW3ffE 9Eu3Ff+EPu_^] ̋W3_f9tQH̃9t1H̋UES3VBB BBB%3ZZZ ZZZZZ Z$Wz,j^3ZeDReDeeDeDyeDeDeDdDdDeD0fDeD\dD̋U EVW GWPPz u腖x2uJ~ldEEEE EEEunB F\xv GEEPWEPs_^ A ttt-f;t If;t2ðA t ,f;t2ðQ S3Cf;ttu"t[t $[2[̋USVWu‹u D$5pG`h4BV|$,Ā}(tQQċ2\B@菗}$t6uQQċhB@mQQċ2lB@S3ɉ|$L$D$dv?uQQċhB@L$D$2ۋdыxuu tWhxBV WpL$Dl$L$sQQċB@蜖] }uQQċB@ zWuhBhBVr WhBVc u uhB&tQQċ؃B@%uhBV& =G0@hBDȀ}$PBDPWhxBV~}tuhBV~ |$v_3ۋD$dӍzv?'uu etWhBV~ WhBV~ Dl$u] tQQċĄB@I j)_^[]$̋UjhRGdPgqG3ʼnESVWPEd򉍀EMUxE El`3ȉhp|;C;u Au3lh39HPtH@yv ȉE|39F$t ~vJ?FF~PF}PF|PF{PFzPFxPQh~BhPF03tDž@+t>t9Au9Yu :F|tAB;rыv|jWSVhЄBPj ktPWWh@BS+|=qGt|Wh(BS|Wh BS{3 9vYdu.At uD@;rFxPhB{ 3=qGxuUt9CtTnB mt<5GjàWVhBPǢj XMd Y_^[M3誒@GtKPW4HYYt5;u1 GAff;pu+J~v/N\@m=GjVWhBPjDH=G0@jUXjKYE=qGP¹BD=GPBDPhBhP芐Qff;pu+x3ɉ9tdȃyv xdtPJ+ыdQff;pu+ʋxBtDt;\lPOPh3S։EX=G=qGtR3XkDdك{v~\v?5Gj3SWVh(BP6dg{v3RQjP|h0@Wr=qGt3 {v3PPPS|hBW.=qG5pGEhBjPWր=GjPj3P|EPW5pGEhBjP 3֋jPPP|EPWj :5Gj赕$Vh`BP賗3ɉ_~vQPhBWo|;C3ɋDL;u@Au~,t ~v? ~v>5Gj,WVhBP0(3ҋ$+hu3҉2틅|8@+Ǚtu3D7zf;7`V\7 t{ύatdu5ȃxvpPQhhBnƅD7}PhܖBxn p|8@+Ǚt9|luOȃxvpPQhBVmD7}2ɉplj)Xj}YEPh\BVmj(Xj{YEPhdBVmp0@+ƙm3D>zf9>`W\> ΍tq|>$tGƃxv0,D>xPPhBhP$Pj,Xj YEPhBl2ɈpC0@+ƙt;l_j)Xj}YEPhBWClYċB@ȃxvQ x~,t Fxv ~vVPVPhBWk3ɉ|p8@+Ǚw\v/ttu0p|p@+Ǚ9|r3EQQXB@(h$B+h;ep3ɉ0@+ƙ43pED>zf;>`> ΍|>$t_ރ{v,(D>xPPhBhPiD>}SPShBVixy,t Axv yvQPQShBVipA0@+ƙ;lxAPL;"IdF+d;j 5Gj肎VhPBP臐3Md Y_^[M3k̋U$SV3@t$$ىD$3ɉ\$ `L$D$(W{3D$$idE|$ @LfO D$hnBff;uftfQf;Pufu33A u3(_v5GjXP蒍YSVhBP蕏\$ t$(|$t-~\v?5GjXPOYWVhBPR|3Af9OG f;tjYf;twtr3ۍwD$@~D$vSPQhxBt$ |gL$$~vfO SPPhBt$ JgGC;r\$D$w@~D$vPQh(BSg<t$XH3@;t*jX;t#5GPNYSVhBPQ\$ wjZ;ڹBBEPhBt$f 3KPSL+t>|$xuLxvPhЛBWcfKP SL+FH;rʋ|$ +DxuLxvt$PhBVfD$( ,BBxHEQhBVeKP SL+3t/|$p0h@BWeKP SL+FH;rً|$ \$+Dp0hXBSe v?WhlBSze *׋~v6fO VPh BSNeL$D$$At$(DL$D$$;L$,_^[]NOtDBW5GjXPiYWjVhhBPjjDH,;wKtZwm D$τDPBøhBøBøBøBøBøȝBø؝BøB-- w$'D@Bø\BøxBøBøhnBËDŽDDhDDnDDtDzDDDDDDDDŽD  DDDDDDDDDŽDDB ,;whtJjZ+t0tuQQtB@hzQQdBPQQHB@QQB@<Ńtt+uQQ؞B@#QQB@QQB@5z-- q$DQQBQQxvX \ppXWhBSTEPA +P;<Dž49A;t)j[$;u<,A33Džf@EG+0RP04E_$;Gu =GuQQċB@X[3ɋG+‰D0PmщX\P0t8T+Ǚ4tn+ύwTjYDH4QhBSD> QQċ@;4shB BUjXG;Dr,QQċB@THhBS=3 3DžfEpB qGuO8 GtGXt#QQQPhBSy=HQQċB@BTۋXt?RRRP`B0@DNjHPEPtBDPhBS =$3Hɺ0@`BDPEP,BDPhHBS< M('h B'WGPhhBS< GpBDžTBBDи0@DTRWPRhBSE<=qGQQċ`B@ St`G`P(W h0@hTBQQċpB@RhB(W WhBh BNQQċHB@lyRGRGGQPhBSG; ˋpB@RGGQPWhxBS:GPWhHBS:X$tH@Ph4BS: WhlBS:3 3DžfEBhBj(EPl$ W$B۸BEP$t`G`RGQGPhBS9GQGPhBS9GPh8BS9GPh0BSo94@B@EPHWGPhBS/9XtQQPhPBS9Bɸ0@DºdBP0BDPhBS8YYċ B@OWWWhBS8 ˋxB@MO`=Gt4WGWPPPhBSZ8WPPhpBFGQGWPPPhBS8WPPhBS7033Džf@E A+pQP;'Ej@3ɋDB+0B\(0@4(Txt4,=qGu`tdY*333DžfTPE PVP4f\PɏEAD3ɋ@pG(jX\B+0D;<@QQԋˉB2 M3ۉ8$`8_@5Gipj |x"[WVhBP&]Dž82|Z8l̋UaqG3ʼnEE SVuWkD <؋Dž hjP7\hDž jP\VhBhP2K(t>tFf;sBPhBt#FPhBhPJt8Ftf;rjWXPhBPhBhPJ0hBW?4 B,F ;0$DtXt-PPPPPhXBPPPhPBW3tPPhBPPPPh`BtOt-PPPPPhBPPPhBjtPPhhBmPPPPhBPj Yj*ZEPhnB~Pj Yj*ZEPhnB_Pj Yj*ZEPh0oB@Pj Yj*ZEPhToB!Pj Yj*ZEPh|oBPj Yj*ZEPhoBPj Yj*ZEPhoBPj Yj*ZEPhoBPj*Yj XEPh,BPh8BPj*Yj XEPhBՍPj*Yj XEPhB뻍Pt PPPPhB0PhB=qGu!5GjVVhBPXPtPPhpBWPhBm--t~t]HtPhBW0 KtBPPhBW0@BQQPW0Pj Yj*ZEPhhBPj Yj*ZEPhnBPj&XEPhBW;0Pj Yj*ZEPhoBÄt=qGtt$(VhhBS'/vVhBS' QQċB@}>D$d$$D$D$v#t$$T$D$PVF;wrt$ D$+D$;D$ =qG=GPBCDPhCS$' =qGuj=GCOt1ɹ!3M_^3[8 uW6hCS!Pj*Yj XEP6hC뙀uW6hCS Pj*Yj XEP6hpC[uW6hCS Pj*Yj XEP6hCt*5GjEQWVhCPG6W6WWhHCS! uW6hCS Pj*Yj XEP6hCuW6hCSPj*Yj XEP6h(CYt*5GjDQWVhCPF6W6WWhpC7t*5GjDQWVhCPFWWWWWWWWWWWWWhCS6W6WWWWWWWWWWh!CSxPtPh)CShp*CS j*Yj XEQPQ6QPPWh*CuW6hCStPj*Yj XEPW6h+CSK- AIt;W6hCSPj*Yj XEP6hHCS$t*5GjPj*Yj XEP6hCtPh&CS RBPRh'CSzBBDQWW6h(CS1DDDDDDDDDDD?D}DD&DDADDDADDDDDDD̋U<qG3ĉ$8<@SVWQQ̉A2GD$jWX̋UDqG3ĉ$@SVWj -4@QQ̉A?-,@QQ̉A|-GD$@x RD$D0@X{É\$,vd$({vPhh,CW QQċ 2C@6j-QQċX2C@PR-Sd$CT$D$ 3D$ "΍AxD$vD$D$tj,,t$h$-CWT$ D$ Ut |$uBT$j,,L$ t$fI 0@XBDRPhX-CWD$,T$@DD$;C4QQċ-C@O,{t$h2CWGYċ3C@,C33T$t9T$ D$PD$D$PVT$|$BEȋCLHF;r;T$3D$H3ɉt$jAD$ZL$0T$$$HD$ D$fL PhPBRh6CWD$4H/CjYf9L 0@EэH΃yv D$(RQaPhP/CWD$P8D$D;CL$ADD$8T$ \ f;\ \$4\$,uZ|H|Sj[f9\$4H/C\$,EL$DƒxvQPt$t$Hhl/CWD$,L$H@D$D$8FDD$8;s{j)B*hPBt$(h$7CWyd$D|$v;\$4HSt$@tPhPBt$4h/CWBLdC;\$r͋\$,T$$D$(t$L$0T$$D$DAt$L$0A;CD$=\$(hPB4VhP7CWthPBVh0CWuQQ7C@3QQ8C@q|)L$@glD$@x QQċ8B@M)j )$@QQԋωBF +)QQċ2C@)3$L_^[3)]Ës(=Gjo7VWh8CPs9jWX̋VtFW+j_k^3FF_^̀yt 3G̋VpVj߉};}tuj_;uu}~.v,F+};v u Q+Vu ыsF_^[̋W3aA_̋UVWhE jhe@0PERVp0jh0@[l_^] ̋UQQVWhU3|$Jff;u= @+ыAD$ ff;D$u+L$ ERuQWp03Ph0@k_^] ̋UhEjhrBj hrBp0jh0@k] ̋UQQVWg Gуd$ zff;D$ uE+jhsBRQp03Ph0@?k_^] ̋SV3W~ff;uA+yv ;u P"u_^[̋USVWu EP}襥u~ uM Vs"x E0@B{DDDt@uMu 3S/Mp`xVuu MA_^[ "̋UQQVuWUF=rGSE3PPPPVRPu H؅!HtNd@]ӋtK3QQSPVuQu H#HtN@33EQP>[_^ ̋UESWjY+MC+ E;VpC+}+;vF kȉEu kjYU‹ECu;u&+P3R8} 6‹;Cȁ we묋+P3R8C}+PVOQo8 tC+j^kaMEAk^ȉKMȋ_K[+̋UQQSVW}?;NF++E+;v_ȉE؋׋E+Qu [F+P6S7 t V+уFE_F^[ ;s;v_*̋UQeVuWM;uVjW1 >t u_^̋USW} ـ u+VwˋuO?-j;MWgE;}EuuuuE(~2QMuujj/ (j G~2E uuEetuuu2̋VNtN^tj_^̋UQVW}7tBS_;tp;u}Gp+ip.3GG[_^̋UEQ;wyv  +QP ]̋UQS]WGO+;w)GvVS4jV6- ^ QSuS _[̋U USًK+M;CVW<EWN}M{Es<}Qv03VP2}Wju,EURSP1uVjWu,>E_^[̋VdP8,FN\NDN,wN^n̋W;tVqNSLDF;u^_̋Vt(VQF+jDYkD3FF^̋VtV+3FF^̋UVuWy;wϋ+;w ϋ;B_^]̋VVvBQfF^jG-ى]3j3Y3SKfsU3VNfuE[u Q-̋UQSV3W=ܹHuFSh;ChC3^]̋USVWuuh>CVC 3+t 4h?CV|C G+;ruh?CV\Yċ?C@4_^3[]̋USVWRh;Ch,BCV]`3d3ɉM MAxEvEA PEP#UdjPiEj*Yj XDȋExvuQPh`BCV`H;sQQċhB@UMdGDM;`[QQċHB@!j _^3[̋USVWRh;ChtBCV]`3dω} MAxEvEA PEP"QQċBC@ UdjP5Ej*Yj XDȋE,xvuQPh`BCVX`H;s j,MdGDM;`RQQċBC@ j _^3[̋U ESVU0@+ED}W3M}߅FjZEUMD7 f;Etf;u37t-uEtPhBCQ SShHCCuoCEE}jH0+ƙ}Z9Er]j_+Ή}}ߋT3 3@f;tjXf;uy3tsNˉMyvED3kDƉExv0uf;UCCE0@Euyv xvWuuWVWQPWhCCuM,GEA]M0@+ƙ};U]_^[̋SVWمt0QQEC@ 73tVhECS6 F;r_^[̋UVuCfz ru ~vVRhECQ0~v6VhpFCQ u 66hFCQ^]̋US] VWQQĉUGC@zE3@+t(4hHACVhE C@+;r݋] uh;Cuh$GCV:`׉}UdʉMAxEvEA PEPQQċLGC@UjWEj*Yj XDȋE,xvuQPh`BCV`MH;s j,?MUADMU;`S3j)QQċTGC@:UdPEu}uhXGCV&9`ω}dJ t3t.Bxvu uj&j YPQhtGCV EPQ`H;sQQċhB@ MGDM;`w}QQċHB@] ׋QQċGC@< _^3[̋USVW3G+t 4hGCSG F+;ruhGCSw +74h?CS yj { _^3[]̋UUUS3ۉMVW]9`Íq,EdxMv?蒓EdEu f|M PEP>uE,;dyGu-~jW[uvEj|uWuhJCP{MUAEDME;`L_^[u,~v6j*uWVhICP+jWX̃~v6juWVhIC̋U(qG3ʼnEEESEV3W} 9BPt J@yv 9G$t_{vWMG~DPG}PG|PG{PGzPGxPQh~BhP 0WӋh;CSh;Ch@CVӋWCh;CSh;Ch@CV`ӋW9QQăΉ4AC@ @+t@34hHACWC F+;rSh;CSh;ChXACVPWSP(3M_^3[ ̋USىT$ M V3WA+p}t$L$tgΉt$U D$ы0D$ ]tWuQRuT$(uBU pL$D$L$B+|$9D$rWWhHCSUKW_^[]̋SVWQQċ KC@fw\~WvGDxvQPhKCRr_~v6Vh8LCSXYċ`LC@0O 9tQQOC@2_^3[̋U BSV23+ƉM3UMW<u ރ{vc_~v6 PHYtff;uPHYuPHYu2PHYu#UMBA2+M;X3_^[ËEu4Ơ~v6},v?jVSWhOCP0v?u,~v6jOWVh8OCPSjWX̋UQQSVًW3Jff;u+ыMUt:f<{.u.3f{F;FtFMQPnMUK yMG;rƋF;FtF MQPAM_^3[̋Ujhz GdPtUqG3ʼnESVWPEdىEuEE3EWPPWjPyv N@yv QNyv QNj+ƃt=C4hGCP C;r䋽QQċXPC@ "6hdPCSF ;t j.];uQQċTGC@{} PWgPh>CSXQKtPPPFQQčKlPC@}PPK QuExvPjVFP3Ƹ3ɫ;uAujVpEG7+ƙH3302 VPF@~v6PVD`td3dFxvPjF PjVDA;`upA0@+ƙ;ȋ jjDž4p ;su}QQălPC@u u hdCWYYċ4AC@E0;pt6hHACW ;su]Cp+u PuheCW3j X_^[̋UVWUV=u+UOVJuuUOuuu uV/_^]̋USVWRhHhCV] `ed3ɉMExv? PEPQQċhB@UdjPVEj*Yj XDȋExvWQPh`BCV{UMBDU;`dMfQQċHB@-QQċ(.@@_^3[̋USVWRhhCVE `d3Eω}EX{v PEPj,`QQċBC@ Uju4Ej*Yj XDȋE,xvSQPh`BCVYEMGDM;`EgQQċBC@ _^3[̋U$ES]dVW3UE9{Pt@]{v ]]QQ4AC@E @+t(] 4hHACVC G+;r]3uuhPiCVxE`]ω}}MMAxEvEA PEP>j,QQċLGC@UjWEj*Yj XDȋE,xvuQPh`BCVUMBDUM;`c]3j)`QQċTGC@uhiCV uhHjCVt 3ҋupSu}hjCVSE9`ߋEL t6t1BÃxvu uj&j YPQh\kCV+QQċhB@EPEQ΋EGD;`r}QQċHB@׋1QQċGC@s_^3[̋UqG3ĉ$zPES] VD$ EWD$|$t J@yv 3Ƀ{$t {vM?IC~DL$PC}PC|PC{PCzPCxPQh~BD$@hP 0S׋ u&u WhpkCV׋St$u]$_^[3 ]̋VWt*2ft"BPVHYPhtGCWP3jWX_^̋USVWRh@lCW'] d;htgVzvD;htBQQċhB@~vEDF;huQQċlC@QQċ(.@@kuu hlCWkd$hBD~(Vvu=D;hQQċ@uHB QQċlC@3_^[] ̋U Vu EVPMy u ff;As dyGE^̋VpVjDZ^7̋UQQuEu PEMMH ̋US] EVWSP<}襥My uff;Ar E@L=hyGtGudyGMS5dyGWMp`~VuuMA_^[ j;!Gu EPu }ܥuVt E0@g{ffftf;]eej(Yuu NE>M~3~fF EVuuMA.̋UdyGUHb By u&E V03 f9qsIJ@ By t^]̋USW} ـ u+VwˋuO?jDZ( t^_[]̋VNtN^tjDZ̋ItjDZ۵jk!G>ى]E3jDEYC]MuCxf fHVFPO|CM CHCHC@ C@ ̋VqNz^r̋Uz$Wr1EPr(t$V5GjWVhlCP^2_ËEDmCff;uftfPf;Qufu3H$ElmCømCømCømCømCømCønCønCø0nCøDnCø\nCøpnCønCønCønCønCønCøoCø oCø0oCøLoCøhoCEE#E)E/E5E;EAEGEMESEYE_EeEkEqEwE}EEEEH$EoCøoCøoCøoCøoCøoCø pCø0pCøPpCø`pCøpCøpCøpCøpCøpCøpCøqCø0oCøLoCø qCø0qCø@qCøTqCøhqCø|qCøqCøqCøqCøqCørC EEEE!E'E-E3E9E?EEEKEQEWE]EcEiEoEuE{EEEEEEEEEEE̋UHS]VUW{CuEYfKfKjYuWVh rCPts3GWYVhrCP ItBMEuPCkAPQfuGhrCWYP 3GutsWyYVhsC8t=MEPCkAPQEuh4sCW9YPC {uN9{uMEPs Q{u2MEPs Euh`sCWYP sCs3GWYuhsCP33Ƀ Ef;KsFЉEEPC Pu_EuDUEP+MUACMU;rsCW[YVPdYY3_^[}5Gj8YWVhlCP;̋UqG3ʼnESVWٍxpGPj@ZJxPhsCjYP3 9wvNΉtLPGPWt؅uQpLP׋9tFt;wrhtCjkYPuYY3M_^3[eË5GjDYSVhlCPG̋UqG3ĉ$SVWh8tCj|$YPC,YYt7L$Qp} t$hHtCjYP|$ 39s$vphptCjYPYY9s$vAD$PC(Px nt$htCjaYPk|$ F;s$rh?@jAYPKYYCt$ t3L$Qp t$htCjYP Ct3L$Qp t$htCjYP C t3L$$QpP t$$htCjYP {3jxYWVhuCP{Ct)L$8Pj@Z|GjGYVhluCPK huCj+YP5{YYtFt$ D$Ps@ t"5GjYWVhlCP T$3$_^[3]h!Gp}3ۃVj@ZFQQVW]t?t%5Gj(WVhp}CP&ߍj sPuPuptƅƅ@+Ѕt5zf9Au:FtGp;rxPV xs8tR6=Gj pQVuCuCEQWhuCPxtW~6GjpQWVuCuCEQShPvCP xDNPz ip;`;\TQPP |dfXf;D h譻DA;h ;`u ;\^~6GjpQWVuCuCEQShH{C~6GjhpQWVuCuCEQShzCP$~6GjppQWVuCuCEQSh0xC~6Gj3pQWVuCuCEQShvCSip9\tC~6GjpQWVuCuCEQSh|CP 3ۍPp{h!GN3X33hDžlfXuDHLRXEhDPC +CPC K+DT4pj@ZAQPXWpPX蝱h}CX荱CT4xIlXCGXQTu4C GK+T ;[Vh}Cj2YP< D̵Xn̋UA @;Ar EaA uAA0AAE3]̋UQQEVEEEV@"bRPYY^̋UVux@^]̋UVu@^]̋UVu@^]̋U QMwhlGEP̋UVu蠣x@^]̋U QMJhlGEPV̋UVuP@^]3ADAPATAXA\A`AdAAA AAAAA A$A(A,A0̋UQQSVu Q3VQQuMKDUCH3W{4PCLUp9H {D $%EV׋MUVKOVKVK VKdVKVK VK | VK$ VK(7 VK pVK, `VK0G PtCLAM;H 3_^[j X$E$E$E$E%E%E %E-%E:%EG%E%ET%Ed%Et%E3VqDAAA AAAAA A$A(A,A0 ^ ̋U}Su E 34WjuKD t{D}Wt E O3j X_[]̋UESVWjSODY uj X(wD3U  NJϋFB BPv ^_^[]̋U8qG3ʼnEES] Vj0PE̋j0PuE̋Puj XE܍űU3WC_9MuBDEC9MuBDEC9MuBDEC9MuBDEC EC$uBDEC(9MtJDMK,3M^3[̋UQS];TEMPuuC 9Cwmt"= wbkDMPs tLMDU VWszCBC(C(BCBC B 3_^9C tCB3j X[̋UQSVuW} M3ffGfFGfFN@tWG 3VfFN _ttMjDS7 MD=QUERujS jX%=VMAPt =BMAPjS 3@jZEHDNN N X3FF@tWG щVN fGfFGfuN ]WK ;s9+;w3kCF MFfG fFfGfFFPw|j X_^[ ̋UQSVuWMV ƒt uQ>BMAP>VMAPuA} WWv-u1^w#MPVD t _3w j X_^[̋UQSVuW]>QUERuP} WvuCGPv u1^w#MPVD t _3w j X_^[̋UQEVqDu3J0PHH ``3^]̋UUV2v+AD;APsFf|Bu2^]̋UVuWyD~tj(vtb~tj vtL~tj vyt6~ tjv ct F$t=?wPv(Cu2_^]̋UQSVW8EuDEj XSt07>LEVLu$F=TUUw@k PSt E02_^[̋UQSVW;uIEj @PEt27M>TASKu#F=H$ wk PQtt32_^[̋UQSVW8EuDEj XS6t07>OPCOu$F=TUUw@k PSt E02_^[̋UQSVW;uIEj @PEt27M>KEYWu#F=w PQt32_^[̋UQSVW;uIEj@PEdt27M>EVNTu#F=TUUwk0PQ8t32_^[̋UQSVW;uIEj @PEt27M>CHANu#F=w PQt32_^[̋UQSVW8EuGEj XSt37>MAPSu'F=?w PSft E02_^[̋UQSVW;uIEj @PE%t27M>TTBLu#F=fffwk( PQt32_^[̋UQSVW8EuGEj XSt37>QTABu'F=?w PSt E02_^[̋UQSVW8EuDEjXSPt07>FLTRu$F=w@PS)t E02_^[̋UQSVW;uIEj @PEt27M>EVTFu#F= wk PQt32_^[̋UQSVW8EuGEj XS~t37>EVTAu'F=w PSTt E02_^[̋UQSVW8EuGEj XSt37>PRVAu'F=w PSt E02_^[̋UQSVW~t~t vPHv6~?t2>t 6TH^~}t vHH]7HH}^ t4HSjP\H3_F FFF F^[̋UVW~~EujWX} u}uPa uu Pu^~ vSN9CRIMuFA%=v:3ys:#9ywA jYwrw;w3j __^]̋UU:WEVTu-B;r$;E wA@ =wPRmt3j X]j$hNGũeQuu uEt E~ };r3҉U؉MЋF;P sL;vh;sdAE;rZ;wVAE܍X;rI;^ wD3ۋ};}u.CuEFF;P tWv}tC:BM놋Ej X/E3Ɂ8Ëe}MTENjMd Y_^[̋UVWy+M;rE 4;r G;2_^]̋UU;rA@;w u +R2]̋UVW3WhjWjhuXHFuH:WWWjWP0HFtWWWjP,HtWv8HF t3_^]̋UWQQuwGuH]Vju uPDHt1Vw@HGt Vw`HG twLHuHϋ3^_] ̋UQVWhpG$H5(pG(pGjjuFjPH6;uދM3Qff;u+MEPj_W4HP QuPMċuV'xMuċAu$ PAV%YHXM-#3]E@ES9EË]EMd Y_^M30][̃ ̋thV~CPAYY̋UjjEPQRj+u uH ] ̋UQEjfHfPj3fMYDPQEPjhX~Cj+u uH( ̋UQVjEUP$EPu$^̋UB ,VWj Y w9;$;EjRxjBϋ2EEjPo$uVYw!tF tAt@tσt:uy_^t*tttuZ2R+jjj2 $뾡 pG= pGt!@txrj2pX~Cpj YmhQj22 pG= pGt@txrj pX~Cp9hQj Mm&hlGP:E:E:E:E:E:E:E;E;E:E:E̋UE 3҃I I$I(A EA^ pG= pGt!@txrj pX~CpjYhQj M#hlGP̋U$SVWW O$;3CIjXEYO$vJ pG= pGt!@txrj pX~CpjYhQj L$-#hlG39w4t*9w8t%;tyuw4o 8t @G8 w8w4SA+ÃD$qA D$ jPV+ _^[]á pG= pGt!@txrj pX~CpjYEhQj L$x"hlGP̋U,SV3WF4F8F,F0FHlWF fD$Y\$;F$tF$D$xuD$jhW~C-~ItfD$ D$ jPAPFuWN$;N(tD$AF$_^[]D$PN E u pG= pGt!@txrjpX~CpjY.hfQjL$$a!hlGP̋U$Vf8f4~0u,F ;F$tYF$@A@AF,APu @F0@jAF0D$ PD$ u`^] pG= pGt!@txrj pX~CpjY_h~Qj L$ hlGP̋UQQS]VWCE3GHG8G49G0t2w,A+G,EqEjP\Vg,tuEjP8_^[̋UQVMEjPE ^̋UQVE jEPuU ^̋UQQVEjPE u^̋UQVWEjEP:rpH_^̋UQVWjujF EEP8Qm_^̋UEM H t t t u ;u]2̋US] VWSuD$tN ;N$tL~Hu F$xt=EW~4fD$D$D$PD$ \$|$t EljF8_^[]̋U(SVWMA$;EE_^[1jqjQ13ҋNff;u+jSfjfEzEjPr1j ]VZ1L 3QQYff;u+NV!PAPj Z PAPQ pG= pGt!@txrj pX~CpjYhQj MhlGP CECECEDEDEDEDE$DEQDEsDEDEDEDEDEDE̋UTd$ 3S]3Vt$ L$M W;D$+CD$+Ã|$E|$$G;S?j%_f9||$$D$ :t.|$~'+;v,+ʍS;CQL$ P M ]D$ KK3ȉ\$D$\$Pj D$PgD$9L$v&j"Z+>Oj%[f9]uD$*3t$z+|$ +}jZ+;ENL$ L$0WD$8fD$(A<\$-u24FEM uE" u;; 0  k ; ;ruV;AЃ r ar ȃ ;ˋ ;rfA"wr3E;sfЃ r ar E;s#;]ًM ЋË]; ;r;utuEe ,uEU_^[ ̋UQEU VFFF CFVFFF F$F(F,N+s<+sP^];GP^]̋USVWz3مx(fM+ƙ+f; sx f;Lvp;~_^2[]_^[]̋VV`CuSV~Cwu?VTCcu+V_~COuV l~C;^ð^̋UQuE@]VqWy;v,A+;C PE_p^]̋U SVEW3EF~F |UtN;Nu3F_F^^[]_^2[]̀yu1Y̋USf]VWfۿ0@E}>t~u j68YYfE >_f^fFF^[]̋UME W3A;tV1i?;u^f_]̋U} Wtu uQu PuQ3PPPG_]̋U,SVW~ 4I6$XE~,u_^[]Ã~,u F, ~,QF(D$Pp0zn(uF,뫍D$Pgp0׃~,t pG:= pGt @txrVpCpj Yj?QVL$$ hlG~,7D$PD$L$ H;j ^j _ t t f;tf;u ;u pG:= pGt @txrVpCpj Y!jdQVL$$X hlG]~, pG:= pGt @txrVpCpj YjqQVL$$ hlG ~,D$Pt$|$jhCVWjhȈCVWjhЈCVWjh؈CVWjhCVW pG:= pGt @txrVpCpjYhQVL$$+ hlG0 pG:= pGt @txrVpCpjYjzQVL$$ hlG~,$ pG:= pGt @txrVpCpjYVhQVL$$ hlG pG:= pGt @txrVpCpjY hQVL$$= hlGE pG:= pGt @txrVpCpj YjQVL$$ hlGPBQTETEHTETEHTEHTEUE%TETEqWEUEUEBTEBTEWE̋U3ҹŝ9U tVuV3iȓB;U u^]̋U$Vu uNE;Nt F^EPu pG= pGt!@txrjpCpjYhQjMhlGPG̋UA$V9t A^á pG:= pGt @txrVpCpjYYhQVMhlGPڶ̋U VW~9>t[} tHu u;Gt8 pG:= pGt @txrVpCpjYhC+_^ pG:= pGt @txrVpCpjYhQVMhlGP̋UE9E uUMP裣u2]̋USVWN9NuM+]+>k;G;s(PtV‹+;s9F2_^[]̋U]̋USVVVj[Vj-[fVVfYVVvfYVgV \fYV MV j[@V 6V ,V"V}^[t3fA]ҋƒfCffCfA̋A ̋AA̋VW3W@~~~ F~ _^ ̋UVEt jVYYY^]̀y@t qеY̋U] ̋U VW} F 8;r&Q0FFWuP蹸 ~_^] pG= pGt!@txrj pTCpj YjaQj L$hlGP̋UVuuN^]̋U VW}F 8;rQ`WN_^] pG= pGt!@txrj pTCpj YjsQj L$hlGPK̋U(SVMW~ ;vFwE;FW#YvvSX ~t vY~ ^F_^[ pG= pGt!@txrj pTCpj YhQj MJhlGP薱̋UQE3SVAAA W9MpH֋}؋?rH֋M_^AY [̋UVW} rWWutFP[ ~_^]̋UQQSVW]CEE;C vu;spH֋;upH֋;pH֋}؋?pH֋MEY8p H֋MPg_^[̋UQSVW];spH֋;u upH֋;pH֋؋E8rH֋UBZ :p H֋MPI_^[̋UqG3ʼnESVW3ۍ|SSShPxxPjAtH#ukSppPjtPhdCjAHt4HVSPt6TH~t vHHFM+jQPvEUhHvlHvHHƃ~vPHt t~v6PVH^̋USVW}3SWSjSv0HFt9WSSjP,HuNdvHVhC%lj~_F ^[]N=vHVhCȁNQ蠜̋UQQESVW_;v %;rPGw+7+7ETHwHHS!V7?ƉG;GvGu_^[OuPhCh̋UA+EU ;w+RH]̋UVuW+7wV7ƉG;GvG_^]̋UQVu6EF^]̋UVu WVwaVuwG ƉG;GvG_^]̋UVu WVw!Vuw聮 w_^]̋UME A=v?>t:ӍO0Ӌ};wuh軓YjȉEueN0S?S7~vvMPt@]MSVujEPIHEMnuE8'iPh ̋US3VWjsƋ;+]MZtmE‰EEf9HPMu8f;Uw*E+3Ѕtf9PPt,A;r]MEfPPBsA;+ljM;r_^[Bf;w3̋U3MSVq؉EW9+ta3ɉEf9HRMu^;t'jQ̉3;uu>^;t;uF_^[j$#Gœ]OS2Mehx)YȉEDuEA;At e0A URP;3VSO(.VEPSO,8VSO0#VSO4VSO8MMԛj#G}j3Y_(a@@f@ O]OEwEj Yu^`@@f@ V̋VNaNzN^3h7$G|j3Y}}j`@@f@ E`}"j EY}}9`@@f@ EhEE0@E;x$HvH@ EEPXMP`\6PPMTxTH@vH@@P|xPHxPh'LCxYu8xv@tpP@pPMUDtm;u;uhM`MwË4H@bPh +HaPhaPhȇjЍMHaPEPh藇jh$Gى]sS${K}*0@u؉E;C(E܍K]uO3]NA4Fuu uW _^] ̋UDqG3ĉD$@SVuW^C\$D$L=A{v PQ=K3|$,jD$0PP{ {D$ v\$|$O{PD$HYtL$D$I L$D ,t ugL$,T$- Έ\$T$/ Έ\$T$1 Έ\$T$3y Έ\$kT$5Z Έ\$!LT$7; Έ\$ -T$9 Έ\$#L$; Ѝ\$-jT$&_L|, { ЈT<Gu܍T$3ɋ;u2Au4+0t%~huN\Ph\$ShttuN\PhRt(uN\Ph0\Phx!L$L_^[3b]a\PhyF33SVW3j[~N3N~ ^fF3V0~8^4fF 3VH~P^LfF83V`~h^dfFP3Vx^|fFh3QYf3QYf3YQf3YQf_f ^[j<$G蕒Mj3Y]]W@@f@ EMȉ]v],E40E;Su(u$Quuuuu 7ui73F E܍EPEMPMw }tot7vEԍEPEMPM}tJ;}jMSMMP(%PR0h*YPh+̋SVWt4t*~\u$9x\u@:Ft ;u_^[Í{Yʋ莾kYKhaYTYWVR3Ph4̋U S] VuW{`}0tMPWCPPVtPWu(QMV*0{xt-0QMShWRVF==Ӌ+jYD$0P3ɉL$9L$vh3҉T$ MPWPV& DmCL$ PWt{ƃuj{0udL$T$ AL$T$ ;L$r{HM VWC8PuxHufu0W3PhY,W3Pht @<r<vW3PhZtPu,P:6tSƇ_^[],t&W3Ph)WI\VKhVVWVR3Ph|I\VKhVVVR3Ph|V3Ph({|̋UMSVWt yP+yL3@E;tn{,KMv MC(AU;sFj%Yff;u4;s4f9u&j EPVHU j%Yt̓t;wu;r0;]u_^[UUuW2Pht{̋UQU +u\ztU2Ph-TtaU2Ph/6tCU2Ph1Y])U2Ph, {̋U,S]VWT$40L$D$;H0&8WYD$ D$ CPWD$,uBD$(D$(CPWD$4u#D$0D$0CPWD$< g04;t;u F:Brq;u銖D$D$PSj3jj6PPD$8-"D$tL$t @EL$D$ƃD$;T$40L$Y7tG8u)NPSjj ȍjQ jP!L$u VL$T$;u_^[]̋3SVW3j^3Zzrf3Z(z4r,fBfZ03ZDzLrHfB43Z\r`_fBL^ZdZh[jH$G%MM`eMME}E<@Wu Q6MH0@1 ȍEPEMPM}x(t/x,HvH@(EEPEMPMm}Ht$xvE܍EPEMPM<}t+;VM4M,M߈ 贶QPhR5螶P1蕶R@0PhLYw~HZQPhK?w̋UQS]VWL$ {DtshVuC4P06W{\tB}CdPC1WC0jhC QL$ Vj CL P"Ƈ_^[]̋UMVAHuUAL;APt$3ҋ08u*f9V`uK9VtuF9VXu ;APu^]|PPhP"oP΋fPRPhN%XPPhM=vHP΋?PRPhO#v̋3SVW3j^3Zz rfZZ3Z0z8r4fB 3ZHrLfB8_^ZPZTZX[j84%G|MȋE 33E3ɉ]}MċE!Mp(@,ƉE;t1u;t 7}EPWM6Mċ}EЃ ;uҋ]uȋNj+ËP;E EЋ3j`=yYȉEEEv6FUԋNFBJJ v vqFNtEPuPN8FM<uԋMjuVGMЍEP ME%;bE PM諳؅̋UQSVW}L$ wƋ_ t֋Ã## t UtaU3 tu"NSVPh3H39OHt)u GXPVQh̊CSwG8QL$(P :Ɔ_^[] MSVPh2s̋UEVWL$ D$;E x(@,ljD$ ;t`yvqPw7/ugG;AuG;Atny0t!y4A vA q0Pw wuq ;|$ uL$ju6;t$m_^]LPh4rL΋Rpph5rѱL΋H LRPh6rj@~%GM3j]Y]]I@@f@ EMEEE0x|ȃxv@EEPEĉMPM}tuMPEP}9X0t+x4H vH @0EEPEMPM1}t@;uM-M%M؂議KPh4oq蔰qK΋脰H `KRPh6DqiFK΋YRpph5qjj%G)MC{ C;u}vECwH,P(QQVu `QRj`utYȉEt}ev6Bv O vAMG8vPGXQPwWGT{Wh̊CRVjqM EP HCM衂C̋3SVW3j^3ZzrfZ3Z,z4r0fB3ZDrHfB4_^ZLZPZT[j8%G_MȋE 33E3ɉ]}MċE!Mpk@ƉE;t1u;t 7}EPWMMċ}EЃ;uҋ]uȋNj+ËP;EEЋ3jX"sYȉEEEv6s@MԊFAv v\@NtEPͫuPN4@M5uԋMjuVMЍEPpME;hEPM薭̋UQSVW}D$ jW6D$ ;u_^[]̋UVWMQw}t7yDt)u ATPVjh܊C™RPA4jP Ɔ_^] GPPh mjH0&G M(eMRMEEE0xȃxv@EEPEMPM}M@EEPEPv}x,t+x0HvH@,EEPEMPM[}tA;pMSMMC}ӫFPh 轫HFPh ~l裫F΋蓫RHQh Wljj`&GdMC{ ,C;u}vECwHPQQVu `QR4jXoYȉEuew7D=w Nw6=OF4PNFTPFPsVMh܊CR PjwEPNHCM}C̋U3SVW3j^3Zzrf3Z(z4r,fBZ03ZDzLrHfB43Z\r`fBLE_^Bd‰Zh[]̋U3SVW3j^3Zzrf3Z(z0r,fB3Z@rDfB0E_^BH‰ZLZPZTZXZ\[]j@&G{MMeMEE8@E;u܍E܋vPvE6ȉvuevPEv6vex,HvH@(E؍EPEMԋM PxpLXPauMP6xdu-xHH4vH4@DEЍEPEĉMPM}t0MPEP}t+;u;}MM:uz JϋP0@HCRPhjA(HCPhChH4BϋHBRPhkh̋UUVWzdu r0FuNz(t@uBhzdPVjXj_E P3zdhCjj PBPƆ_^] M SBVPhD7h̋U SE3V@W]p8+tUIusE@E;rE]@p8+tUI˩u=E@E;rE@ p8+t)UI蘩u C;sE _^[MAPheg̋U3SVW3j^3ZzrfZ3Z,z4r0fB3ZDrHfB4E_^ZLZPZTZXB\[]j8&GxMȋE 33E3ɉ]}MċE!Mp k@$ƉE;t1u;t 7}EPWMl Mċ}EЃ;uҋ]uȋNj+ËP>;EEЋ3j`sjYjȉEEEv67MԊFAv v7NtEPuPN48MJ-uԋMjuVMЍEPME;fEPMw̋UQSVW}D$ jW6D$ ;u_^[]̋UQS]VWMQ vvtRyDtCA\҅t @Ћu AXPVjhCjR3@j ZEPA4PM Ɔ_^[] >PPhdj8'GLvj3Y]]u;@@f@ Ej]Y]]S;@@f@ EME EE0xnA\PQEPM4}tyA\PAPEPM}9X,t+x0HvH@,EEPEMPMu}t=;uMqMiMu=PhۢH=Phc=΋豢RHQhucjjJ'GvMK3!}싁E;tl0΋S !j%!M3j _B0fuQEPQM!!}E}uGEPMMjh,Cu uj>_!]̋3SVW3j^3Zzrf3Z(z0r,fB3Z@zdrDfB0ZLZPZTZXZ\Z`ZH3_^ZtZxfB|[̋UESVW$(L$D$;3ҋxPHL fB;uXPHL\$4|$;|$t\$fB;u\$;uȋu\$ufP|ALPQx@t@HL$QM PD$D$(P|$$t5>Gtu@GHuWWE;t$$_^[]$Ph7 $PhsJj *G[E3ҋʉUM؉}܉U9P ]CPSL+te tjX3҉Ef9Q`w9t E;}t }EPWM}܋CPFSL+;rM؋Es0+~PƉUvSdRUUR3RRQMWPs@HUzuKuKXEs0K\PCX+ȃ~EƉUvuURuQu؋MWPs@HUuMdwZ0#ˋ'#RPhl Ijj09*G[s}3u3jMī3_M}fEԉMMӍMh@C39F(tEh(CMN9yv QQԍy ff;Eu+JMj"MFP+FLs 4Cj>MFPVL+3G3Eȋ4ƃ~vvPj hXCt E}t"QQ3QQ0@HpC@ut7~v6QQ̍V1ff;EuQQ+qC@ 5~v6QQ̍V1ff;EuQQ+qC@׍M`uEGNPVLG+;ECPMEPN0;MFHmMY̋USVuW~vFM EEPE]P} u)wwvS蠏xE ;8tOE_^[ PhF̋UQSVWj,h!@^u upE0By]+ǃ́"@ts3u u t h!@,_^[̋USVWj M3YU ;]S4{f9u ;rm+tdfM;sE+P s莈t+ǍM+PVEPȆ]K;Kt QP֎C PQ$j Yo_^[鑚̋UQQSV3ۍESPh0Cu(Hx2EE^^ ^^F@^Fƈ^ ^$^(^[hCPE̋UQQVWuuu u誆tDp4D$PD$PQHPhHCt$t$uujt2_^]jLs*G9VU E}MPBeE y uL$|G$_t.ϋ耙}MVGMPw(u QHӍM'hUË詙ϋDVPu EPMAhmGEP}R̋VN d'F@PPY^j*GU}uV6 eF PO @F$G$F(G(F,G,T̋UVcEt j0V)BYY^]jX*G8U]}3]3EEEЉEMЍEEUP EË]e} y{ uP{$|{$CEt/<ˋח}MVGMЋuPs(WQH֍M&SËˋ蚗VPWEPM?hmGEPP̋UQuh>Q Y]̋UU SVW}jh$CQωUlETH3VEPWHM AtAG9Eu TH9u_ƈ]U^[̋USVu 3uq؁wuuhChWVN^[]̋UVWu 3u)wuuhChWW_f^]̋UVWu 3uuuh8ChWV_^]̋UU SVuWjh$CQΉU"THj EPVHOE UtN y9Mu TH8tuhChWS>EU_^[j(+GQ33M]3KCfMUM E j)Xf;DQj$Xf;j(Xf;AfAj _f js_f;fAj _f jt_f;fAj _f jr_f;fA j _f ji_f;fA j _f jn_f;uzfAj _f jg_f;uhj.Xf;Au_RQ{v;@BSjm_f;u7fAj _f jc_f;u%j.Xf;AuRQx{v@mcQhChWV P ̋SQQUkl$S VsWjh$CMQjh$CQx΋;B+ F0t@t25tu6jhCWQu"jh CWQu(u tshChWu2_^][̋U}&Vu Wuf>{uMU 茮NL;t'VhChWW}3u쫫}E_^ ̋UQjEPuHM fEM;Eu u P}jjX+GZPŖEPzuu5d!@5`!@jhXCτt(C0EPePMMouu5d!@5`!@j hTCtM>@E܋Puu5d!@5`!@jh4Ct s#**u)Njh+GNue{}ehx}2@YȉEM3ΉEEEE3EPp0D`?tz t?t"HJxP:(pP"phP p0EP*P(V M`Pԑp0EP2EE 8 u}XP茑p0EPE8Ǹ}3uܫ3ɫ;u Au2농PPt^Ht2HPܐp0tȋ@P賐@p0 EEP萐uujhpC{t quujhxC{tǀMuhChWV58P%X0Pp0 ˑ^x u hxC}u hČC}u h,C螒[EPSuu5d!@5`!@jhC΄tP8uu5d!@5`!@jhĐC΄tPuu5d!@5`!@jhԐC|tPPuu5d!@5`!@jhC<΄tjPL cuu5d!@5`!@jhC΄t P -uu5d!@5`!@jhC΄t 7 uu5d!@5`!@j hC΄t`Puu5d!@5`!@j hCh΄t$Puu5d!@5`!@jhDC2΄t0P\^uu5d!@5`!@jh,C΄t<P!+uu5d!@5`!@jhMw蜄xu hxCu hpCV=jj .G>eZEPuu5d!@5`!@jh̊Ct$EP2KePMM 7u=jPR.G!=}3ۉ]}j`]\/YȉE]EeEċPp0vtjt5t u|EP茁 EPzp0SQEPap0EPP8M!EP1p0AQIxu hxC0u h(C ;jj.GF=s讃E܋P`uu5d!@5`!@jh8CτtPEPepEE;tt pEPQlwE썎TP\Muuu5d!@5`!@jhLCt\EPEpEE;tt pEPQlE荎HPMM]΂hLCh8Ch<Wrx;jj .G;eej`,YjȉEseE܀gEP~uujhxCQjtE܋P#uujh,C)jtEԋP~p0誀ux(u hxC襁bE܋P]~uu5d!@5`!@jhCt,6EPWPNLE֐ME߈souAL;APuhCh;W :jH!/G:9}3ۉ]}jl]u+YjȉE ]E|EċP2}p0<tC<"t&<(uiEP}p0ȳH0GEP}p0b.EPp}p0EPPMgu hpCfz(u h4CR7jj .Gx9eej`a*YjȉEoseEd~gEP |uujhxCgtE܋P|#uujh,CgtEԋPq|p0J2~ux(u hxC~-bE܋P{uu5d!@5`!@jhCzt,6EPWPNLE^MEgs~uAL;APuhCh;W 7jH!/G6}3ۉ]}jl](YjȉE蕹]E}EċPzp0<te<"tH<(EP/{pSjY{EԄuSh`ChWVaMԉH0GEPzp0.EPzp0EPP"M[|Eu hpCz(u h4C:5̋SQQUkl$ V<}@EPyuu5d!@5`!@j h\Ct s(}u^][jj[/Gf6|{YEPyuu5d!@5`!@j htCt#EPKeP踆MM0|u;GuhtCh;VI O5jj(/G5eej`&YjȉE辷seEEzqE؋Pkxp0< t3<t<"uIEPxEЋPxp0EȋPx0p0Eszux(u hxC}u hC\{bE؋Pxu܋u5d!@5`!@jhCt,6EPWPNLE荊ME薂s&{uAL;APuhCh;W 3j /G23ۉ]jl]2%YjȉEʵ}]E6y\EPvp0J<t"<(u8E܋Pow4p0EEԋPQwLp0'yux\u hxC[u hpCK1jj0Gq3ytx{EPvuu5d!@5`!@jhHC$t;EPIȃeW;Wt !G QRMM踀yuZ2jj@|0G2}eeh#YȉEjK3EEuEwtysEPeup0<t5<#t<&uGEPu.EċPup0'AtE̋Pup0owuuCxu h\CdxEPuuu5d!@5`!@jhCt#CM8EPPOLEMEuu5d!@5`!@jhCgt2CM8EPPPOLEӆME}uu5d!@5`!@jhCt!CxvPhWWc EȋPn ƉMEЉutʈhuYYMGMj hnCIMj hXC^uu5d!@5`!@jhC\t:}u4EPHwCuu0Cx@t@HEv6tih!YjȉEٺEuhXCEShnCNFsEPLHEPL:MF~sM9~/jjH0G/u3}h}p YWȉE;{eEttEP-rp0 tzHtbtDt-E؋Prp0EЋP[r0 EȋPIrp0"ZEP0rHp|EEPrxdp`EMPqWVp0{usxu hxCy(u h]@-jj( 1G.}eehYjȉE赸seErEPpp0<tB<t%<#u`E؋P qp0x?EЋPpp0&Mxdp`EPpWVp0}srpxu hxCseEPGpuu5d!@5`!@jhCt/6EPDPEFMEN{sVsu;uhCh;W +jjP1Gq,3}h}WYWȉE"{ejhCEMq?EP ouujhxCZtE܋Pop0[CquQ+jj1G+4rtx{EPnuu5d!@5`!@jh̒C|t;EPIȃeW;Wt !G QRMM&zqu*jh1G*{3E}hEЉEYȉE螕3ΉEE pKEPmp0-HtTt0HEPmp0ȋEPmp0EPmp0EPPM8\EPmP멍EPnmp0(EPLm8rEP7m ]EP"mhH!HtztZt/xPlp0ȋHpPlp0ErhPl`PxlXP`lPPElp0ȋm8Eu hpCGNjM'jj1Gj(ntx{EPkuu5d!@5`!@jhCt;EPIȃeW;Wt !G QRvMMunuS'j`?2Gu&}3ۉ]}jl]YȉE}]ElEċPrjp0 tktTHt,EPjp0ȋH1EPjp0mȳH0kEPj4EPrj EP`jp09.EPGjp0EPgPLMkxu hxC9u hpC)$̋SQQUkl$8qG3ʼnEVW{u}ƇAkEPhuuj h،CTtEԋPsip0 Cuuj hC~Tt-E̋P>ip0EP𥥥u}܋jnM_3^_][jx2G $E}E33]jY3]ЉMfE]}ث]3]MfE؋E:jEPgp0H<t@<"t"<(ukEPihp0EMEPKhMp0#3|P.hp0EPNPM|MEieu hpC"}u h4CEMEEPEPEPċM[MSg"jj(2G#C}ԉE33eEfE!EEOjtO}̍EȋPgűussj hؒCtssus W(E.juMM"jj82G"C}ԉE333EЉEEfMԋΉETh\CtIEȋP fuujWQtEPfMp0^EBhu8EuWDitZ}čEȋPeűussj hCt#u}EԋGEPssss W$iuMM!jjpB3G!Ms}3u3jY3UMfEԉU}3ỦMfEE}xhkEP-euussjh@B7EPEPs U}EԋGEEEEEEPEPKpE;0t"u}EEEPvv,Pt2{t}EGEPhW jH3YMԉEQEMEQs sUEx$HvH@ EEPEMPVuEP{ME9Y8tNEPs s}EsGEPhWu6gMMM̋SQQUkl$ Vs 3WEΈEMKMOeEPcuujhЌCNt$EP~c}uuErmuujhpCNtWEPDcESEt<{u Pu)ME@PuuKuKj d?8Eu hWYY}u~v6VhW _^][ ̋SQQUkl$V2WEdxCtu3d\hl!dA hl\A`XEPDZx$}t"lX+E\EPZt؋TEu33px ʋPB;su+ET\ߋuPEu33px x|B;su+EP\ ߋu|Eu33pxx|p@p;su+EXX ӋuSQMSQM9Uu3J R+M˅tI\8u|Eu3H @xtpLBL;s:uMjP,t|pX Xt3Ms| ̋Ujh5GdPlqG3ʼnESVWPEde3}3ۉ]jY3]̉MfE}ԫ3]MfEVME&hLCMnVM}uEGuj4EY}EV8[uuE΋=ԹH+=йHk}P]É]];5йH}EMj41@+EykuYQuM\йHuQMԍmh}CMйHMԃ}GMԍuV}ЋE@҉EYEZ>MFu+ECRIMEE]wVM蘿M萿3,E@$Em FËEx Fø Fø@Md Y_^[M3/Z̋U$SVuW|$^+kP|\3҉T$tY!T$6|$D$j4@+|$t$ D$0Yu|$j4HT$D$BT$;rGt$+?\$(D$CRIMD$ D$$_^[]jD5Gj3E!}!}Y3B@@P P EE!}40;Mc{u{0tUtK% K EԉMPEPMgqjZXE܃;E؉EuF+jEF+E荑B+j[UjXHE؋B+UЩuX+TtC`B+UtC$B+UܩtC}t38E@؀} tC@<M+tC΋É]P[ZM؋A+t,UFu+DAV3VxVElE؋]؋@+t2+ЋMST΋ETPuVGVʋE]@+t&+ЋMSTVGVʋE܋]܋@+]t&+ЋMu܍T NGN+uMЋMUЍ TNGUN+ȍL΋EP NGUN+ȍ$L΋EP*NGUN+ȍL΋EPoNGUN+ȍL΋E PCNG}N+ȋULEPNG}Nt'+ȋU LEPNGN} t'+ȋU LEPNGNUԋB+t%+ȋUuԍ LNNE+ʋu+EWEVTMt@@EM<2]uMUP̋UHqG3ʼnESVW3}諍U3ۋMMЫEˋ;uEAuӈ]U3}ث˫EЍ}E;u EAu~+>Aj EVE+FPWF+E̍EjPEWMЋA @EЃyv PQ/WEtjh0@W}t(F+E̍EjPE VjuVt(F+E̍EjPE VjuVF+M+>3͉EȍuċEEPRVAE̥_^[:̋U(SVWj F+EUEN+MX+PU3ɉMthE 3M8AYE܋F+EAPE䋁t@@EMjE܋PUEMPHTMEAM;rFuU+]+ECHANE<_^[j05Gu3jY}}Љ}@@f@ EЋEU }}X+B +]tcڋ׋ MAP+ALAxv@E܍EPEȉMPM^kMUBUHC +;r]uuMA+tYً MAP+ALEAxv@E܍EPEȉMPMjMFHC+;ru]F+j ESF+EPSMkȋ+FPSMЋE,HV+QX΋@PSQEPMLEM;uЋ9]v%}E F+QA\vC;rM3E;t(]@Q@\EPM.LE;EuۋFuċU++EMAPSEȋEE̍<MХKo j86Gى]j3Yu؉u@@f@ E؉uˋC+jEREHP+HLMt&؋CLM؋4F0PEPhGp;}rߋ]E؋0;tfNA0EAht@@EMjEPRFx tF ;pu @x ty u Ȁx t;uuU3@9BHu eEVMAP EBMAPEȋ Cu++ƉEBX<1EċEujYEMfJ!j8L6GPu3jY]]Љ]q@@f@ EЋEΉ]j x+8F+}܉E4QF+EPQ]tR]u MAP+ALEAxv@E̍EPEMPMgMFH;ru3ۋMkȋ+FPPt!UN+H\΋4vC;rߋMЋE;t-}3ۋ@Q@\9EPMoIE;Euۋ}܋FuU+}+‰EEQTAB<MХIj8|6G}j3Yuu@@f@ EuϋG+jEOG+]EčCPG+EȍC0PvËXP+XL]t@@L{`KLvKLC\E܍EPEЉMPMSfFXE;rȋ}]E0;tvG+E؋FLPG+E܋F4PjE؋PvOFx tF ;pu @x ty u Ȁx t;uuuGU+j+EQUERE<]YMG6̋UESVWx+8j F+EyNet6UN+UUHxM4@FFE@E;rʋFuU+}+ETTBLE<_^[̋UHSVW}W]j(fEG|EGP+GLEEC+fE؉EMw\+wXVwXNejX+Ƌ˅DPEPMkEK+ MPM39uWLMQ4WL +MFM;ur3ۉ]GLe4+t.}]j4~G+;rދ}]C];]r] wdCU++ETEMPEEEEEċEEȋGt GH}ЉE̥j <Yu_^[̋US3VuW}쫫fMt ff F`ft ffMfE3GtfffM1F|ft&fEjZt f;tf;uf fM3fEt3fE f fE+fEfE3fMfE1EEfE򋆸t@\Eetff@fEfMC+EEjPKV_^[j(6G}j3Yu؉u%@@f@ E؉uϋG+j EJEO+MX+k ]PKtAEKMC\t @ EEPEPM`FX;rċ}E؋0;^FE̋CXt@@EMG+EԍEj PJESCP Fx tF ;pu @x ty u Ȁx tE ;uuMUEOPCOt G++‰Ee?uMԍMإBSj(6G}j3Y]؉]覻@@f@ E؉]ϋG+j EwIEO+MP+k UuPIt&}M؋4FPEP^Cp;]r}E؋0;^CE̋CTt@@EMG+EԍEj PDIESCLFx tF ;pu @x ty u Ȁx tE ;u{}MELEVLt G++Ee?űEEԍMإ'A̋U@SVWj s+3u0HM{+;}A+EkP;HEK3Љ}ttEUBEċB`t@@EMrL+}̥jE܍EPHEˋuPp\l }KEGЉ}u;ruKETASKft ++ƉEe;Uu॥_^[j86Gى]M?eˋ{+;j }GuK+ M؋F+EEP)G}v0]3M̋4FPEPe[puuۋ]}MEE;tk}؋p FVEmEFXt@@EMC+EȍEjPFEVFP% M"EE;Eu}}EKEYWt C++ljEe;u}E܉EȥK+ tjX+WPEfEPFM>sh 7G}u_+jFuE]EkE0O+PEE;XTj0jPYT} j YfEtCCEt@@EMt#APEARITeEȉMEȋEt AEALE؋tfAfE‹A\E܄tCEt AEAPEԋt@xEЋ +M<e3ҋ +}ȉMG+EUt.M4FPEPXUBUp;r׋}ME;t5@Mj HMċM HPMMȋPDM E;Eu˃MM<}j0EP.DMj ME;-]Gu++EEVNTeEE<E1hI7GCى]3jEYEĉ}EȉE\6vvfF uȋE!}E;EX{CxȉEvM@E܉EčEPEMPM} uwwuu&yM}I$ _QEE܍EPQVEPM蹁p`MtjZVuMu*g}uG}{0m {v33j;Xf;ǍK+UE܍MȉEčEPEUP1EE؀x uppuu#&xEK}I$ QEE؍EPQVEPMp`MԅtjZVuMuY`OEuG{f?K+E؍MȉEEPE}P聄]{ ussWux%yM}I$ QEE؍EPQVEPMBp`MtjZxVuMu؋}cGuȉ}MME;]C+j E@Nj+CP@}ȋ7\FˋFPvGAjh0@9AFx tF ;pu @x ty u Ȁx t}ȋC+;utjh0@@}ȋEE;p~FEffEFxȉEvM@E؉EčEPEMPM]{ ussuu#yM}I$ WQEE؍EPQWEPM~x`MtjZWuMu"؋C]ˉEEjPE?}ȃ~0^ {v33j;Xf;ƍ S+‰M܉E؉EčEPEMPMEEx uppuu #xEK}I$ wQEE؍EPQWEPM}x`MtjZWuMuB@MEEjPE>}ȍVFsf.S+E؍MȉEEPtuPV|{ ussVuJ"yS}I$ QEE؍EPQWEPM}p`MtjZJVxMt؋C]ˉEEjPE>}ȍMVME;v tCU++DžtEVTAxE쉅|<MȥZ62jp|7GVuE3ۉ]ċ8E;t$@KDˋٍME;u߉]ċ~+>j }4uEԃejPE;MME;]ċ}F++EEVTF>uE]̋U8SVWj{+;};Eˋp+0Ɖu+CP);3ҍKUMt~E}ȍuȋ3U𫫫B0}إE؊B1EًBdt@@EM+EBht@xEjE؋P:uIUKuBU;r}MEeuuEFLTR++;Eܥ_^[̋USVu3fEW~FEEv6@EtEjEP:uV:t jEPo:_^[j7G}3 Dw GDj_Yu^藫@@f@ w]jYu^q@@f@ lj__ _$ 8̋VN7N1N ^7̃6̋Ujh7GdPSVWqG3PEdeueQ6M裎FPPuF6vPF PFPGEEPuMS+u썅PuMPAu܅yT6M(oh@PKًEu8t)8N yt v,v(uv$QH׋F$Es.FEs.FE@s.FËuƋMd Y_^[̋Ujh=8GdPSVWqG3PEde}܃} uE0@Q3ۉE]M7EUuEt Ef9u]}܍HyM$FTPuF6vPF PFPCEPTIDX1H뜋Eu8t)8N yt v,v(uv$QH׋F$E츃2FE2FE@2FË}NjMd Y_^[̋Ujh8GdP SVWqG3PEdeM3uƋΉuԉE؉M܋]E40U;t.U;t EMQPMM܋E؋U΍EPu EPSM _Eu8t+8N yt v,v(h0@v$QH׋F$E측3FE3FE@3FËuƋMd Y_^[̋U SVW} 3QMw+7VvF3ɉMtD3҉UeEPE‹PMSEMU؁pAUM;rE_^[̋US]VW#WNF$Et G`3fFAt f7G|ftfFt f;tuZ 3AfFt +fFfE fF .fN,fF ffFGHP9 F<Et @F_^[]̋UEVUW 3uF+ЉU}S3ۉ] EeRPEEMEtse+tZu]}eEjPkDEE >EUGB+U;ru]}}FGDU+}];:[_^̋U0qG3ʼnEE S]VEЋщuW}UEE33ɫ};uAu{u܋KPm FPK,a F PKDU PK\F CttffCxFCz}FCzuffCxE荻P E苈tnoPE}uuTt=t7oPrW GPC{GR tC{ t*OTtnP!WM GC| +E,PωE1}v{33M}苆ы<XtOXunPW G G M䋓,}D MWj }u fGfC~ wL{u܀{ttF<t5OXtmPW }uGGLC}t{mP8GPOX+GLPe`G|\;tA+P1HOHd Gt EDFE+‰U}O|E;sUkDQuqhd*v(F+}Q;v Qq+M܋ыNBrFEPOLGP+GLM`G|\G\+GXEMH $ CTC<_^[AMЉM3̋Ujh8GdPTqG3ʼnESVWPEdeU3ʉ}UuYff;u+ˉUMEQPM;(GEPM_M(]Eu8t)8N yt v,v(uv$QH׋F$E;FE;FE@;FËuƋMd Y_^[M3̋Ujh9GdPSVWqG3PEdeщUQQM3uYff;u+O~]Eu8t)8N yt v,v(uv$QH׋F$E츙F$w>Fj jjjZ3tu3BfËn>FZ>FN>FR>FV>Fq>Fj9Gy33Uu3VFfUqE1(jL9Gaى]EU EUejQQMe@MPEPMsC u>uw7u ;t QuMm E&EQPMP E VPh@j:GnQEPM e՛Ph̋SQQUkl$kA 4VqWj4_ M~=s sEk4ƉEp0'yu+E4}ƋM;tC 9FuPsv6'u3_^][jj1:G CS EUejQQM@MPEPMs suuv4v07E̋UV3M W}tfN_^]jRVMj:G}3ۉ__]_ _____ _$_(_,_0_4_8wWD3EH+;WHu鍏Q+A+MUM;v$EP]4E썏GH+GDEEԋF+E}Uu;v EԋPc4MMWHGDUЉE;OQ+EUP8U};ExvMHMvQPMuu8HEQW+ƙ}PV.}ԋME7uQ;Qtu2BA VPRSM};}suU܋MȉEz B+zzE‰}}vrMP~;~t(EIEGEG EOfWFEPEPQW0TE܋ME;E}䍷F+}VEuP肈QQ@+}FQQ+QJQ+}FQQ+}FQQ+}FGxQQOt+}ȉFEQQph@l+ƙ}7G}MUe؅x+}Wup H֋؋WpH֋uMx -؋U ˃"t u؅x ShtC.̋QVWPr H֋VhC_^Y̋QVWPr$H֋VhC_^Y̋UQVWuRpH֋VhC_^Y]j=G蔸ً;eeWp,H֋xDWpPHօt 3FΉM)pEPWH֋u M@DMEMVhCǷ̋UQVEPKt3@9Et ^̋UQSV3WCEPu}DVhĹCiu 9]uҊ2_^[j H=Gv}39_$]؉]]EEPhSG]P,HPhйCuESPEh@Cu؉]4HPhC]EjjS]xH׋MPhCjjSxH׋MPh,CjjSxH׋MPhLChVSx HPhlC}GeEO_tQpH֍MMM3ۍw;FtFEPE EutEP#Oj7QpPHPhCpEPQHPh(C}E؉EtwuGPqxHPhCP}wu^+EJ΍P jh0@w BEX̋U} |]u ujTx=G{ًu}3]u3EEE؋} QQWQEMEC h^FË} ]eMp}uˋ`uWh?VPˋBVPWEPM荠hmGEP}̋UQVj Yu&fyy@@f@ ^̋VpVFj Z^i̋VpV!jZ^si̋VpV}FjZ^Ri̋UVW}Bx tB ;Pu#Ћ@x tz u ‹рy t_^]̋V1t j4V۠YY^̋UA @;Ar EaA uAA AAE3]̋V1thjVuYY^̋V1tNihj(VKYY^̋VtV+у,h3FF^̋VtFW+j_kg3FF_^̋VtFW+j _k g3FF_^̋VtV+уg3FF^̋VtFW+j4_k4mg3FF_^̋VtFW+j_k;g3FF_^̋UVr;rtE B uV`D^]̋VW7t.S_ K;uW+f3GG[_^̋UVr;rtE B uVE^]̋VW7t.S_ ;uW+Nf3GG[_^̋V1t\ hVYY^̋V1tj jdVYY^̋V1tk jlV؝YY^̋V1tt j`V趝YY^̋V1t jXV蔝YY^̋V1t[ j`VrYY^̋V1t\ hVMYY^̋V1tj`V+YY^̋V1t^ hVYY^̋V1t hxVYY^̋V1tX hV輜YY^̋Vt(VQF+j4Yk4d3FF^̋UQVjYu&ft@@f@ ^̋UQVjYu&fs@@f@ ^̋VpVtjZ^c̋UVr;rtE B uV E^]̋VW7t.S_ ;uW+c3GG[_^̋VpV$FjZ^[c̋UVr;rtE B uVG^]̋VW7t.S_ 7;uW+b3GG[_^̋VW7t.S_ ;uW+b3GG[_^̋VW7t.S_ ^;uW+lb3GG[_^̋VW7t.S_ ;uW+)b3GG[_^̋UVr;rtE B uVJ^]̋VW7t.S_ ;uW+a3GG[_^̋UVr;rtE B uVK^]̋VW7t.S_ ;uW+;a3GG[_^̋UVr;rtE B uVTL^]̋VW7t.S_ ;uW+`3GG[_^̋UVr;rtE B uVM^]̋VW7t.S_ N;uW+M`3GG[_^̋UVr;rtE B uVM^]̋VW7t.S_ =;uW+_3GG[_^̋USVuW_ˋ+;s-v.G+;v QV`N+VjS G_^[]̋U SVWjs+YMM]u;s-k3u;ut]j^N_;uu]s(v&C+}Q;v QN+ϋыOC_^[̋USVuW_ˋ+;s2'v(G+;v QV O+VjS G_^[]̋UVr;rtE B uVKO^]̋VW7t.S_ ;uW+^3GG[_^̋UVr;rtE B uV^C^]̋UQEW9GsVw+uPew^_̋USVW33jYEZZX_@^[]̋USW3jYEccx9HvEwHKV;w {*WqyNlOQu{Psک ^_[]ñy̋VNXxNLnN0\N\^\̋VN4\N\^\̋VNL\N4\N\^\̋VNLbN0k\Nc\^[\̋VN8H\N @\^8\̋V񍎠\Nd\NH\N0[N[^[̋VC[[[[[Nh[NP[N8[N [N^y[̋VlJ`TH<&0^$ nFZZNpZNXZN@ZN(ZN^Z̋VNtZN\ZN0ZNZ^xZ̋UkU 4M.Z]̋UQQu EPrEMMH̋UEVxvpE ;puV&u2^]̋U VuEWVu PnX}tMEI$ tGEEEPEuPQ7MWWMp`KVuu螌ȋE_^躎jj0=GK3!G$sfEЋC ủG(tPtJQEh=@P͏ eEԃ}wGEjjw(h=@PHփMM\uu̍EȋPűu5d!@5`!@jhCLt `!@ d!@/űu5 @5@jhȺCVLt;@ @URQPV&EċPufEЄt uhmh\WLYYMu j,=G詢M3!G$ufEԋE uЉG(tPtJQEh=@P蚎 eE؃}wGEjjw(h=@PHփMM)tuЍE̋PuЋu5d!@5`!@jhCTKt `!@ d!@/uЋu5 @5@jhȺC#KtB@ @URQPV&EȋPu8Eu"hܺCh;WYK h\WIKYY$ ̋UQSVWuڋSuYYyWC~?M׋vouOSjQP蓟M3IPXp3_^[̋U BSV2WEUj M3XM;v\j{_f;t (uj{_j)Zj}f;ߍ~XDа"UUj-[f9_u'f9__f9_$Uf9_.K3F;7OdZ ؋EXOFO; ЋE ڈPO %O ЋE ڈPO߉};}tupCi;uu}~)v'F+};v QQ(+ϋыV)F_^[̋UeSVWuX{ u1u FP~@t ev E6~ tԋu uGPu K@u E8@M~tKE QEEPQ6MV?)x`Mtj Z"MWuS`MA_^[wj>Gbً;׃eM w~ u( Ƌ8Hs e@ Ex tߋM z u:Br E@L{ tK]eejY)\M Pu H3ɉH8xxfH VMAw赁j L>G蠖ً;׃eM w~ u( Ƌ9Hs e@ Ex tߋM z u;Br E@L{ tK]eejYg[M Pu H3ɉH8xxfH V~MA赕̋UeES] VWp~ u4su3vvy ev E6~ tϋu uwws3x E8@M}I$ tHQE]PQ7MW'X`MtjZJSuV}MA_^[̋UESW{+;w1VZK+ Q3VRE 0WV^_[]Z̋UQSW]jYG+ E w0kVYO+Q7V 3uV^_[NZ̋UQSW]j YG+ EUUUw0k V\YO+Q7V菖 3uV^_[Y̋USًMW{+; w1VYK+ Q3V5E 0WV^_[]Y̋UQSW]jYG+ E w0kVXO+Q7Vӕ 3uV^_[1Y̋UQSW]j4YG+ ENw0k4V?XO+Q7Vr 3uV^_[X̋UQSW]jYG+ EI$ w0kVWO+Q7V 3uVc^_[oX̋W;tVqNHH4F;u^_̋USW} ـ u#Vwˋu?jZG t^_[]̋USW} ـ u#Vwˋu?jZ\G t^_[]̋UQSVW}pg~ 7Gu1] s73vvyv33w6@G~ tҋ_^[]̋U S] VuF+M;vSU6SuV袓 uGF+E;v)W}PWQ+]}vSWVnu_SuQXE ÉF^[̋U SVWM_+;rxG4 VωEVUEV}MEwOv*7]RVPؒE ΍EEuu]PWV譒 7_^[V̋UQQVW3;tPS9]tG+ AB EABEE;Eu C;]uF[_^̋UVt V+у#EME FEF^] ̋UVtFW+j_kD_kE MFkEF^] ̋UVtFW+j _k D_kE MFkE F^] ̋UVt V+у\DE MFEF^] ̋UVtFW+j_kD_kE MFkEF^] ̋UVtFW+j4_k4C_kE 4MFkE4F^] ̋UVtFW+j_kC_kE MFkEF^] ̋UVW9}wIVNj+S+;w <;}B}[t,C3FFRF_F^]̋ItjZB̋ItjZB̋Itj ZB̋USVWً+Ã=~gu~uu ӍL$WE7u Ƌ+L$ D$+ÃV;}T$ \$L$$|$+Ã=u ׋+6_^[]+lj|$D$~(u Nˋ֋D$D$PW R|$D$|D;3҉D$ˋD;D$u PGPQǃ}{̋Ud$D$ S] VWp~ u8st$3vv"y d$v D$6~ t̋t$ uwws3x E8@I|$ tES7L$ W7X`L$tjZ@St$V%tMA_^[]:vj|>G%u EP#}ܥM} y u;Ar E@J{ tI3]eejY PPuHu܉0ppf@ sMA^űU $$SVW;w~ u4u Ft$PPt d$ v D$ 6~ tЋt$ uGPu zPu E8@G{ tGu L$3SB6x`L$tjZz?Wt$VrMA_^[]tj>G跉ueEX{ u6ju FP y ev E6~ tϋu u GjPu 踋 x E8@O~tNueej Y_Nu MPuxSHHMf@ qMA誈sj>GHEN+j4YEF+E;XF+ϋ+;vZωMk4ȉEMk]4eu}ߍC4E܍KE NuKNVV]W9Uu41‹;CȉM;땋U4VC4MVP}4tVQF+j4Yk4o=E@>k4ωNMωN脇UQMGuujj}Mj>G胇u EP4}ܥu} ~ uFPW/u E0@P{ tO3]eejYcLWPuHu܉P0ppf@ oMA识q̋USVWً+Ã=~gu~uu ӍL$W5u Ƌ+L$ D$+ÃV;}T$ \$L$$|$+Ã=u ׋3_^[]+lj|$D$~(u Nˋ֋D$D$PWL|$D$|D;3҉D$ˋD;D$u PGP~Lǃ}{̋USVWً+Ã=~gu~uu ӍL$W@6u Ƌ+L$ D$+ÃV;}T$ \$L$$|$+Ã=u ׋&5_^[]+lj|$D$~(u Nˋ֋D$D$PWL|$D$|D;3҉D$ˋD;D$u PGPLǃ}{j7?G蜄}7}܃eejYIM ؉]CPE^EKA33ssfC E?Ew8F u7]SFuPIt ev E6~ tՋ]uM u$GPQbIuujZ>Fn9!MyI$ tSuVlMAv nj o?G蟃ى]3]eejYHE }GEG7wwfG E3Z{ u7Gˋ9Au G9Au2$3yIF y Gt΀z u5B9Gu B9Gu2$xujZFi8My tWVSkMAs m̋US] D$VWSP|$$SWt E8@]~I$ t]ED$ D$ PD$\$PQ6L$$V4x`L$tjZ7Wt$$t$$jMA_^[] m̋U$VW} EWPMy u;Ar E@U~ tREEEPE}PQ6MV4x`MtjZ7WuuTjMA_^ llj ?ǴEUUU+j0YEF+E;XF+ϋ+;ωMk0ȉE;Fk]0e}ߍC0EE @E؍EQMԋP苸uKGGVQW9UtU;4VC0QMP+4tVQF+j0Yk0 6E@>k0ωNMωN ‹;CȉM;w)Ft jZN3&MyI$ t"EPuuyfMAQ} h̋U S] EVWSP}SWt E8@U~I$ tSEEEPE]PQ6MV/x`MtjZ2WuueMA_^[ gj?GT}ً}+jYC+E= @PrE= kAekEQu M؍AEE0C3E;u};tTVB;uu?EVBEE;us;tE+ljEW 8BE;uuE܋@Pu}qE{QM0uu0jjx>qA̋UVW}D$P\t$ t$ uu j hC$΄tuGu Pw$Xyt$ t$ uu jh0a@$t[;HD$Pt$t$5d!@5`!@jhDC$tW%,E@uE5_^]̋UQQVW}D$Pet$ t$ uu j hC#΄tuGuU kEuuNjȉEBK9Mu+ Q3W| 'E+P3W{C+EMPuQ{EV@PW*E_^[n.?̋UQQESVWj4+NYEC+E;xC+΋+;w‹;CNk4>u,U u(kE4u$u uuȉEuu1C9Eu+P3W{ 'E+P3WzC+EMPu4QzEV@PWE_^[(m3>̋UQQESVWj+ YEC+E;xC+΋+;w‹;C k =uU kEuuNjȉEEK9Mu+ Q3Wz 'E+P3WzC+EMPuQyEV@PWE_^[lG=̋UQQESVWj+ YEC+E;xC+΋+;w‹;C k=NX+щ]+;vHF;uU uEuȉE HF}9Eu"+P6WUx 9 ;C؁wD뫋E+P6W0xF+EMPu QxSuWE_^[jq;̋U E+SVWUUUj [MA+E;XA+j Yϋ+;w‹;CUUUk C:Mk 1M ÉEIfpuHF9Eu+P6SOw 'E+P6S0WuuWPHt؁N@M;p̋U qG3ʼnEBSVW:ރ~VvtXhjPt"^ +;uV+!EM_ NMȋEN^[da1̋USVW}ߋF++=?N@+E?+;v4?ȉE0M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ ";uV+z EM_ NMȋEN^[9`0̋U S]VWF++=?Nx+?щ}+;v=?ȉE/M ]EF;u$+P6Wl 7 ;Cȁ?wZ봋+P6WlFM+PSQlt V+у}E> ENM_N^[?_/̋UQSVW}pg~ 7Gu1] s73vvڠyv33w6@G~ tҋ_^[Y]̋UEx uppE p0荠x2]̋USVW}ߋF++=?N@+E?+;v4?ȉE.M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ ָ;uV+EM_ NMȋEN^[~].̋UUHb By u$E V03 9qsIJ@ By t^]̋USW} ـ u-Vwˋuϋ?}jZ  t^_[]̋UQQSVW};F+jDYEF+ˋ+;vkkDȉEY,QkMD؋+UhVQSl)tVQG8F+jDYkDgkD_ÉFEÉF^[;s;v,\̋UQ‰EVtZSW^(jDjVcc{3KC CDCjZ3c[DfC3cmSfu_[Q֋7^̋USVW}ߋF++=?N@+E?+;v4?ȉE+M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ ;uV+EM_ NMȋEN^[qZ*̋USVW}ߋF++=?N@+E?+;v4?ȉE)M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ 誳;uV+EM_ NMȋEN^[FY)̋USVW}ߋF++=?N@+E?+;v4?ȉE(M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ N;uV+\EM_ NMȋEN^[X(̋USVW}ߋF++=?N@+E?+;v4?ȉE'M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ ;uV+1EM_ NMȋEN^[Vs'̋USVW}ߋF++=?N@+E?+;v4?ȉEV&M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ B;uV+EM_ NMȋEN^[UH&̋USVW}ߋF++=?N@+E?+;v4?ȉE+%M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ d;uV+EM_ NMȋEN^[T%̋USVW}ߋF++=?N@+E?+;v4?ȉE$M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ 耮;uV+EM_ NMȋEN^[oS#̋USVW}ߋF++=?N@+E?+;v4?ȉE"M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ 膬;uV+EM_ NMȋEN^[DR"̋USVW}ߋF++=?N@+E?+;v4?ȉE!M E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ ;uV+ZEM_ NMȋEN^[Q!̋UQQSVW}?;NF++E+;vbȉE ؋ϋE+QjRLXF+P6S]t V+уFE_F^[ ;s;v WP̋USVuW ];wyC+jYVˉEPE;wakQkM։}+UOC};;tuW ;uu]uVuO_^[O9 ̅t"W33aAfu_̋UQQS]WE;wdH+MH+Nj+;w< ;BVˋE+QjRVMA+P1V\MWSV-^_[N̋USVW}ߋF++=?N@+E?+;v4?ȉEaM E! Ћ^M;u;& M;Cȁ?븋!R;u-!R;uV;tM+ϋ'D9;u>t"^ 輨;uV+EM_ NMȋEN^[MS̋V1Wy (p;u_^̋VNtN^tjZ ̋UQVW}7t8S_;tp(;u}Gp+ipF [iE pMGiEpG_^ ̋UMU A;Bw r;s2]̋UVt V+ ME FEF^] ̋UqG3ʼnESVW}~^v6tHhjPSM  GƄ;u3;stA;rM_^3[D +̋ItjZ ̹ C!g̋USVڋ]u;W~;jYM}UJ$:H$MsQFVPXE MFAƉEE]B$:C$]s&M]uB$:C$r]MuuEM;u_^[̋US]ÉM+UVsWuƉU+(~Z] @SǍP5US+΍Px5ESP++֋f5MSRU V5M] u VE5ru;s"z[$]X$8]r w;r];s @$Eȋ8H$r w;rMuډ}];}s=M@$c$:wrFE;t u;rҋ]M}u;v={@$E`$E:wr;t72;rыu;ً}]u$;}tb;t  u5];}u;t  u] }ME_p^[j@GSuE3ۉj]Y^MFIHM PFFHFHFX FX #S j@GRSUً}E }}Ee;t5sOF}PK'OEV>'4E4};]uQ׋R̋UVW}pg7G$u F7P-tv33w6@G~ t֋_^]̋USVڋ]u;W~;EEEEVP}zEtPFVPTE DPEEPLt&]uESP/u]uuMEE;u_^[̋UEE A;BwrA;Bs2]̋US]VWu M+lj}ύ4CP~}9us(}V^SuSV|u;r}];s VWauWVVu;r}֋߉U];]s6SV2uVS'u;t ;]rӋU]}E;vK]{VWuWVu;tE;rE}]U;Ћ]u$;]t_;t} 8U;]u";t } U  Ex_0^[̋USVڋ]u;W~;jYM}UJ:HMsQFVP;RE MFAƉEE]B:C]s&M]uB:Cr]MuuEM;u_^[̋US]ÉM+UVsWuƉU+(~Z] @SǍP/US+΍P/ESP++֋/MSRU /M] u V}/ru;s"z[]X8]r w;r];s @Eȋ8Hr w;rMuډ}];}s=M@c:wrFE;t u;rҋ]M}u;v={@E`E:wr;t72;rыu;ً}]u$;}tb;t  u5];}u;t  u] }ME_p^[j}@GQMى]E3jEYCpMU{ 1IOM wGCCHCHC@ C@ Lj@GLuE3ۉj]Y^MUF  H HFM FHFHFX FX >L̋UQVuWE;t(S+ރW3PN00;}u[Q֋者_^j}@GLى]E3jEYC6M{1M IW3҉OM GCCHCHCP CP oK̋USVu EW~ t9p@x u}w7pp踂E@ v}vw7;0u"艂E0@@gyGMu w7ssFyaCH E@t0@w7vv yMuz{ uTssw7x@MEWP˸uW}Wt>FF6EMNFFH E@uaE@0`_^[ ̋USVڋ]u;W~;jYM}UJf;HMsQFVPQLE MJAƉEE]Bf;C]s(M]ufBf;Cr]MuuEM;v_^[̋US]ÉM+UVsWuƉU+(~Z] @SǍP*US+΍P*ESP++֋)MSRU )M] u V)ru;s&@z}?}f;r w UE;r;sx@f;r w;ruډ}];}sBM[@f;rw FE;t u;r͋]M}u;v<{7@EFf;Erw;t2;rҋu;ً}]u$;}tb;t  u5];}u;t  u] }ME_p^[̋UEVu WT$ ~@L$D$t$vD$EvL$ ID$G D$GD$wOWG_^] ̋U(E$VWT$D$ E L$,D$Exv0HEL$D$EȃxvxE|$D$ E xv8PET$$T$D$(ƒzvt$ t$t$Vt$(t$0Qt$tVYt6WjWH 9>tVuYt6Y{0WV0. tkujjYYE5MEQPVYYËeQ t2}uEEMd Y_^[jVEun; qGűUuY]̋UEV@tVY^]̋UEVH<AQAk(;tM ;J r BB ;r (;u3^]Ë̋V t dsGP;t3u2^ð^̋U}usG \u2]Ou jDY]̋U=sGt]Vutub8 t&u"hsG} YuhsGn Yt+20 sG sG sG sG sG sGsG^]j-jhjG eMZf9@u]<@@PEuL f9@u>E@+PQ\YYt'x$|!EE3Ɂ8ËeE2Md Y_^[̋U) t}u 3sG]̋U=sGt} uuuYY]̋U=sGuu hsG+ YY3ɅDM]̋UuYH]= ̋UjHuHh HPH]̋U$jHtjY)tG tGtGtG5tG=tGftGf tGftGftGf%tGf-tGtGEtGEtGEtGtGtGsGsG sGsGjXkǀsGjXk qGLjX qGLh@̋Uj]̋UjHtM)tG tGtGtG5tG=tGftGf tGftGftGf%tGf-tGtGEtGEtGEtGtGsGsG sGsGjXkMsGh@̋U uK Ytu Yt]Ã}>C̋UVu6j uuu VhGhqG ^]̋Ujh AGdPQSVWqG3PEdeueZYgG3Md Y_^[jhpkGP3ۉ]]];]tMHMUE EC]EEMd Y_^[]EuuSu uj hkGE] Ë}NjuueO}t+uMHUEEMd Y_^[}] uEu uWSVjhkGK3u}u;ut>+} }MHUFEEEEE8csmt'EEËeEMd Y_^[#MEp0̋UEWPfEHE3EEH1EH1EEPHEM3E3E3̋ qGVWN@;tu&;uO@u G ȉ qG_ qG^3@3̸@hvGH̰hhj2 ujUH$HHH̸H̸H̋U$VjHtM)j$jP |xffftfpflfhEEDž@jPEjPE E@EEHEEjEHEPHu tjY^9j|Ht3MZf9u)H<ȁ9PEu f9Auytv 2h GH̋UVW}7>csmu%~uF= t=!t="t=@t_3^]0w0̃%vG̋SVCC;sW>t H׃;r_^[̋SVCC;sW>t H׃;r_^[hGd5D$l$l$+SVWqG1E3PeuEEEEdËMd Y__^[]Q̋U%vG$ qGj He3SVW3ɍ}S[wO3ɉW E܋}EGenuE5ineIEE5ntelE3@S[]܉E E ljsKS uCE%?=t#=`t=pt=Pt=`t=pu=vG=vG=vGMjXM9E|03S[]܉sKMS ]t=vG]qGvGqGvGqGtytq3ЉEUEMj^#;uWqGvGqG t; vGqG#;uEM#;u qG@5vG_^[339qG̋U Mh\lGEP%\H%PH%TH%XH%8H%0H%(H%$H%H%H% H%騨̐T$B |3J3LG̍Mk̐T$B J3J3LG̍MiM)̐T$B J3J3MGb̍MM̐T$B J3RDMG*̋Mg̐T$B J3"xMG̍Z̐T$B P3J3MG̍XDDY̐T$B @3J3MGo̍MI:(S̐T$B $3YJ3O$NG'̍M)M0̐T$B J3NG̍M|Mq̐T$B J3NG̍MM@̐T$B J3J3NGr̍MjNMmNMZNMRN̐T$B J3R(OG*̍Mw@̐T$B J3"lOG̍MTM@̐T$B J3OG̋MSMMMM̐T$B J3OG|̍MtM`iMMShVM̐T$B <3SJ3IPG!̍M+SMNSM M̐T$B J3 LPG̍MLML̐T$B J3PG̍MLMLML̐T$B J3PGi̍MM=̐T$B J3YJ3OPG'̍MLMLML̐T$B J3,QG̍M=̐T$B J3hQG̍MM'=̐T$B J3J3QGu̍MmKMpKM]K̐T$B J3]QG5̍M<̐T$B J3-RG̍MKMJ̐T$B J30RG̍MM<̐T$B J3J3dRG̍MPM{JMsJ̐T$B J3sRGK̍M,<̐T$B J3CRG̍MJ̐T$B J3SG̍M P̐T$B J3,SG̍MHEԃ eM3%ÍM'̐T$B J3J3XSG`̍MM$̐T$B J3PJ3FSG̍M$̐T$B J3SG̍M鯼̐T$B J3J3SG̍MAM<$̐T$B J3J3(TGr̍M̐T$B J3jJ3`dTG8̍MyMB9̐T$B J3(J3TG̍M9̐T$B J3TG̍MS̐T$B J3J3TG̍M̐T$B J3UG\̍M̐T$B J3TJ3JHUG"̍M̐T$B J3J3tUG̋M̐T$B J3UG̍My̐T$B J3J3UG~̋E eM̐T$B J3e,VG=̍Me8̐T$B J35XVG ̋E eM%8̐T$B 3J3VG̍M 8M8̐T$B J3VG̋E eM7̐T$B J3nVGF̋E eM7̐T$B x3*J3 WG̍Mp6̐T$B J3̍Mˍ̐T$B J36J3,@eG̍M鑍M$̐T$B J3J3leG̍MMMMMMMMMM̐T$B J3reGJ̐T$B J3OHG'̐T$B J3,HG̐T$B J3 fG̐T$B J3HG̐T$B J3HG̐T$B J3EGx̐T$B J3}EGU̍MM̐T$B J3EpfG̍Mާ̐T$B J3fG̍M鮧̐T$B J3J3gG̍Mt̐T$B J3J3HgGy̍MG̐T$B J3qtgGI̍MG̐T$B J3AgG̍M~̐T$B J3gG̍M=G̐T$B J3gG̐T$B J3$hG̍MF̐T$B J3|hGf̍MFMF̐T$B J3VhG.̍MlFMdF̐T$B J3hG̐T$B J3iG̍MEME̐T$B J3hiG̐T$B J3iGx̍M&#̐T$B J3piGH̋ME̐T$B J3@ jG̋M@E̐T$B J3LjG̋M&E̐T$B J3xjG̍M>M:̐T$B J3西jG}̐T$B J3肿HkGZ̹qG鰇̹ĹG̹qG鐇̀=HyGt 5DyGHY̹rG`̹rGP̹0rG@̀=PyGt 5LyGHY̹HrG̹`rG̀=XyGt 5TyGHY̹xrGІ̹rG̹rG鰆̹rG順̹rG鐆̹sG逆̹rGp̹\yG3̹йHL̹ sG@̹8sG0̹PsG ̹dyGhpGH"CGGGGGG"`CGGG"CGZGbG"CGG"CGG" DG0DGDDG@fD D D"DG,GG"DGmG"DGGGG"4EGG"hEG9GGG!GG)G1GRG"EGGG"FGGGGGGGGGG G G G $G ,G 4G <GGG OGWG_GuGGGGGGG"GGG"0GG G(G0G" pGGpGxGGGGGGGGG"GGG+D +D"0HG+G6G"dHGHGvGGGGGHG LpG?D 0pG@D@X@D""(IGG"TIG(G0G8G"IGhGpG" IGGGGGGGGGG"4JGBG"`JGGG"JGG" JG;GFGQG\GgGrG}GGGGG"DKGTKGhKG@nD"KG G"KG<GDG"KGtG|G" 8LGGGGGGGGGGGG G G"LGI GT G_ Gj G"MG G"4MG G G"hMG&!G.!G"MG^!G"MG!G"MG!G!G3E3E"HNGhNG"G!"G|NGqGA9E"NGa"Gi"G"NG"G"G"OG"G"G"LOG#G#G&#G.#G"OG^#G"OG#G#G"OG#G#G#G",PG $G$G$G'$G"pPGg$Go$Gw$G"PG$G$G"PG$G$G$G"QG%G'%G"PQGa%Gi%Gq%G"QG%G"QG%G%G"QG&G&G#&G"(RGS&G"TRG&G&G"RG&G&G"RG&G'G 'G"RG='G"$SGm'G"PSG'G"|SG'G'G'G"SG((G0(G0(G"SGj(G" TG(G"LTG(G(G(G"TG)G"TGP)GX)G"TG)G"UG)G"@UG)G"lUG,*G"UGf*G"UG*G"UGVG*GVG@ܾE"PVG +G"|VGK+G"VG{+G"VG+G+G"WG,G"4WGB,G"`WG,G"WG,G"WG -G"WG;-G"XG-G"G"gG?>G"gGo>G"hG>G"HhGXhGlhG@hF"hG>G"hG"?G*?G"iGZ?Gb?G"4iGDiGXiG@F"iG?G?G"iGiGiG@9F"jG@G"DjG@@G"pjGp@G"jG@G"jG@G@G/GCGGG@aGkG"$kG4kGGgGGG0pG `CLpG0CC,mGlpG CpG CC8mGCHmGpG #ECdmGpG $EpG `#ECTmG bEtmGCmG,qG0EEmGkGkGlG0lGkG0lGkGllGlGkGlGlGkG|mGqG mGkGkG0@Jn $0DRbp|"0>L\hv 4bD& *4*t0 GbPJ<ldDR`ltzlh(~pX<$ zjZH:."BV0vbD(p 4F^* 2>Jn $0DRbp|"0>L\hv 4bD& *4*t8_initterm9_initterm_e_c_exit?_register_thread_local_exe_atexit_callbackapi-ms-win-crt-runtime-l1-1-0.dll__CxxFrameHandler3wcsstrV_o___acrt_iob_funcw_o___p___argcy_o___p___wargv{_o___p__commode_o___std_exception_copy_o___std_exception_destroy_o___stdio_common_vfprintf_o___stdio_common_vfwprintf_o___stdio_common_vsnprintf_s_o___stdio_common_vsprintf_o___stdio_common_vswprintf_o__callnewh_o__cexit_o__configthreadlocale_o__configure_wide_argv_o__controlfp_s_o__crt_atexit_o__errno_o__exit6_o__get_initial_wide_environmentd_o__initialize_onexit_tablee_o__initialize_wide_environmentg_o__invalid_parameter_noinfo_noreturn_o__register_onexit_function_o__seh_filter_exe_o__set_app_type_o__set_fmode_o__set_new_mode_o__wcsicmp_o__wcsnicmp8_o__wfsopenb_o__wtoi_o_exit_o_fclose_o_feof_o_ferror_o_fflush_o_fgetws_o_fputs_o_fputwc_o_fread_o_free_o_ftell_o_fwrite_o_isalnum_o_iswalnum_o_iswalpha_o_iswdigit_o_iswspace_o_iswxdigit_o_malloc_o_memcpy_s _o_realloc8_o_setlocaleR_o_terminateZ_o_towlowerc_o_wcscpy_sr_o_wcstouls_o_wcstoull2_except_handler4_common__current_exception__current_exception_contextmemset_CxxThrowExceptionapi-ms-win-crt-private-l1-1-0.dllapi-ms-win-crt-string-l1-1-0.dll3LocaleNameToLCIDGetFileAttributesWSetFileAttributesWDeleteFileWWideCharToMultiByteIsValidCodePageIsTextUnicodeGetModuleFileNameWGetFileVersionInfoSizeExWGetFileVersionInfoExW VerQueryValueWGetLastErrorGetEnvironmentVariableWSearchPathWFindFirstFileExW"FindNextFileWFindCloseUCoInitializeExCoUninitializeLCompareStringOrdinal#CoCreateInstanceUnhandledExceptionFilterfSetUnhandledExceptionFilterGetCurrentProcessTerminateProcessIsProcessorFeaturePresentQueryPerformanceCounterGetCurrentProcessIdGetCurrentThreadIdWGetSystemTimeAsFileTimeInitializeSListHeadIsDebuggerPresentGetModuleHandleWKERNEL32.dllADVAPI32.dllVERSION.dllOLEAUT32.dllOLE32.dll)BCryptOpenAlgorithmProviderBCryptCloseAlgorithmProviderBCryptCreateHashBCryptDestroyHash%BCryptHashDataBCryptFinishHashbcrypt.dllrSizeofResourceHeapFreeyCreateFileWUnmapViewOfFileFFreeResource7LockResource<CloseHandle+FindResourceExW'LoadResourceHeapAllocGetFileSize#GetProcessHeapvCreateFileMappingW9MapViewOfFile,SetLastErrorEnterCriticalSectionLeaveCriticalSectionInitializeCriticalSectionDeleteCriticalSectionBFreeLibrary$LoadLibraryExWTraceMessage,LocalFreeReadFileGetFileSizeExaConvertStringSecurityDescriptorToSecurityDescriptorW SetFilePointerSetEndOfFile>FormatMessageWLoadStringW!SetFilePointerEx=FormatMessageAUSER32.dll#BCryptGetPropertyCreateXmlWriterOutputWithEncodingCodePageCreateXmlReaderInputWithEncodingCodePageCreateXmlWriterCreateXmlReaderXmlLite.dllmemcmpmemcpymemmove( (@Xp  ( 8 H X h x       ( l 4! & J(f  X  XX 4VS_VERSION_INFO e e?StringFileInfo040904B0LCompanyNameMicrosoft CorporationZFileDescriptionWindows Message Compilern'FileVersion10.0.26100.7705 (WinBuild.160101.0800).InternalNamemc.exe.LegalCopyright Microsoft Corporation. All rights reserved.6OriginalFilenamemc.exej%ProductNameMicrosoft Windows Operating SystemDProductVersion10.0.26100.7705DVarFileInfo$Translation Not found : '%1'.+MessageId not found in string table : '%1'.%Duplicate string Id specified : '%1'.9For Provider '%1' attribute resourceFileName is required.8For Provider '%1' attribute messageFileName is required.SProvider '%1', parameter file name cannot be specified without a message file name.)Duplicate provider name specified : '%1'.0Duplicate provider GUID '%1' in provider : '%2'.+Duplicate provider symbol specified : '%1'.UInvalid value %1!u!(0x%1!x!) specified for level '%2'. Values 0 thru 15 are reserved.!Duplicate level name used : '%1'.:Duplicate level value %1!u!(0x%1!x!) used in level : '%2'.#Duplicate level symbol used : '%1'.JInvalid value %1!u!(0x%1!x!) specified for task '%2'. Value 0 is reserved. Duplicate task name used : '%1'.JMap not allowed for template with TId '%1', since it is a filter template."Duplicate Filter Name used : '%1'.OFor channel '%1', value of attribute 'access' is not a valid SDDL string: '%2'.IA <message> element has reference to a non-existent <string> entry: '%1'.BTwo <message> entries are referring the same <string> entry: '%1'.AFor Template with TId '%1', only one <binary> element is allowed.mFor event '%1', with Id %2!u!(0x%2!x!), attribute 'message' is required, since it logged to an Admin Channel.For event '%1', with Id %2!u!(0x%2!x!), level must be specified and it should be one of Critical, Error, Warning, or Informational, since it is logged to an Admin Channel.1Two <message> entries have the same symbol: '%1'.EThe instrumentation node is either missing or in the wrong namespace.7For Map '%1', duplicate value %2!u!(0x%2!x!) specified.5For Pattern Map '%1', duplicate value '%2' specified.For template '%1', invalid Custom Xml specified. Custom Xml must have a top-level element and it should be in its own namespace. Also, the value of property inserts should not be greater than the number of top-level properties in the template : %2.The <events> node is either missing or in the wrong namespace. The <events> node must be present under <instrumentation> node and should be in the following namespace: 'http://schemas.microsoft.com/win/2004/08/events'.dFor property '%1', inType must be one of UInt8, UInt16, UInt32, or HexInt32, since map is specified.7Missing Attribute 'id' on one of the <string> elements.6For String with Id '%1', attribute 'value' is missing.Two providers have defined a channel with duplicate name : '%1'. A given channel name can only be defined by one provider, other providers should use <importChannel> element to refer an existing channel.Two or more events logging to legacy 'System', 'Security' or 'Application' channels are referencing the same message string '%1'. Give each such event a unique message string.String '%1' is given Id %2!u!(0x%2!x!) in a .mc file. Change the Id of this string to be the same as that of the event referencing this string, since the event is logging to 'System', 'Security' or 'Application' channel.String '%1' is explicitly assigned Id %2!u!(0x%2!x!) using a <message> element. Change the Id of this string to be the same as that of the event referencing this string, since the event is logging to 'System', 'Security' or 'Application' channel.tFor event '%1', with Id %2!u!(0x%2!x!), since Opcode '%3' is local to Task '%4', event must reference the Task '%4'.nFor event '%1', with Id %2!u!(0x%2!x!), Opcode '%3' is local to Task '%4', but event is referencing Task '%5'.For event '%1', with Id %2!u!(0x%2!x!), Opcode '%3' is global, and its value collides with that of local Opcode '%4' of the Task '%5' that the event is referencing.String '%1' contains an insert sequence and is referenced by a <%2> element. Insert sequences are not supported in <%2> strings.mString '%1' in the string table for locale '%2' does not exist in the string table for all the other locales.hInvalid Provider Name: %1. When controlGuid is specified, provider name must end with the provider guid.zFor event '%1', with Id %2!u!(0x%2!x!), the 'EventLogClassic' keyword cannot be used together with 'name' or 'attributes'.sFor property '%1', property '%2' referenced by attribute count must have inType UInt8, UInt16, UInt32, or HexInt32.[For property '%1', property '%2' referenced by attribute count cannot have attribute count.tFor property '%1', property '%2' referenced by attribute length must have inType UInt8, UInt16, UInt32, or HexInt32.]For property '%1', property '%2' referenced by attribute length cannot have attribute length.For event '%1', with Id %2!u!(0x%2!x!), a property insert in the event message is referencing a non-existent property. Event only has %3!u! properties: '%4'.BLength of Channel Name must be between 1 and 256 characters: '%1'.Invalid Channel Name: %1. Following characters are not allowed in a channel name: ascii value <31, double quote, '>','<','&','|','\',''',':','*', and '?'.CLength of Provider Name must be between 1 and 256 characters: '%1'.Invalid Provider Name: %1. Following characters are not allowed in a Provider name: ascii value <31, double quote, '>','<','&','|','\',''',':','*', and '?'.8Duplicate task value %1!u!(0x%1!x!) used in task : '%2'."Duplicate task symbol used : '%1'.-Duplicate event guid '%1' used for task '%2'.cInvalid value %1!u!(0x%1!x!) specified for opcode '%2'. Opcode values should be between 10 and 239."Duplicate opcode name used : '%1'.<Duplicate opcode value %1!u!(0x%1!x!) used in opcode : '%2'.$Duplicate opcode symbol used : '%1'.wInvalid value %1!u!(0x%1!x!) specified for channel '%2'. Values for user-defined channels should be between 16 and 255.]Channel '%1' is the 9th channel for this provider. Only 8 channels allowed for one provider./Duplicate channel Id '%1' used in channel '%2'.GDuplicate channel name used : '%1'. Channel names are case-insensitive.<Duplicate channel value %1!u!(0x%1!x!) used in channel '%2'.4Duplicate channel symbol '%1' used for channel '%2'.@Duplicate property name : '%1' specified within template - '%2'.MFor property '%1', property '%2' referenced by attribute count was not found.OFor property '%1', property '%2' referenced by attribute length was not found..KFor property '%1', property '%2' referenced by attribute count is a struct.LFor property '%1', property '%2' referenced by attribute length is a struct.DFor property '%1', with inType win:Binary, length must be specified.>For property '%1', length is not allowed for the given inType.dFor event '%1', with Id %2!u!(0x%2!x!), too many keywords specified. Maximum keywords allowed is 48.LFor event '%1', Id %2!u!(0x%2!x!) was specified which is bigger than USHORT.FTwo events have the same Id %1!u!(0x%1!x!) and Version %2!u!(0x%2!x!).#Duplicate event symbol used : '%1'.jFor event '%1', with Id %2!u!(0x%2!x!), win:EventlogClassic keyword is not allowed with any other keyword.IFor event '%1', with Id %2!u!(0x%2!x!), version attribute is not allowed.IFor event '%1', with Id %2!u!(0x%2!x!), channel attribute is not allowed.tFor template '%1', invalid tags specified. Tags is a 28-bit value, i.e. it must be less than 268435456 (0x10000000).tFor property '%1', invalid tags specified. Tags is a 28-bit value, i.e. it must be less than 268435456 (0x10000000).HFor event '%1', with Id %2!u!(0x%2!x!), opcode attribute is not allowed.RFor keyword '%1', 'mask' attribute is invalid. One and only one bit should be set.TFor keyword '%1', with mask 0x%2!I64x!, mask bit can only be one of the low 48 bits."Duplicate keyword name used: '%1'.7Duplicate keyword mask 0x%1!I64x! used in keyword '%2'.3Duplicate keyword symbol '%1' used in keyword '%2'. Duplicate template Id '%1' used. Required element <%1> not found.(Required element <%1> or <%2> not found.PUnsupported XML encoding specified (HR=0x%2!X!). Falling back to code page 1252. Required attribute '%1' not set."XML load error 0x%1!X! - failed %2,OutType : '%1' is invalid for InType : '%2'.Duplicate map name used: '%1'.2Only one bit may be set in bit map : '%1' 0x%2!x!.Automatic string Id generation logic can only support 16 event providers. Beyond that, string Ids must be explicitly assigned using <message> entries.Duplicate message ID was specified - 0x%1!x!. This can happen when an auto-generated messageId conflicts with those explicitly specified using a <messageTable> or a .mc file.$Duplicate Filter Symbol used : '%1'.GTwo Filters have the same Id:%1!u!(0x%1!x!) and Version:%2!u!(0x%2!x!).OUserData not allowed for template with TId '%1', since it is a filter template.^Struct not allowed for property '%1' of template with TId '%2', since it is a filter template.]Array not allowed for property '%1' of template with TId '%2', since it is a filter template.000 00000 0$0(0,0004080<0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x0|000000000000000000000000000000000111 111 1$1,141<1D1L1T1\1d1l1t1|111111111111111112 222$2,242<2D2L2T2`2h2t2|22222222222223333(303<3D3P3X3d3l3x333333333333334 44 4,444@4H4T4\4h4p4|44444444444444555 5(50585@5H5P5X5h5p5x55555555555566(606H6P6h6p666666666777(70787H7P7X7h7p7x777777777777777778888 8(80888@8H8P8X8`8h8p8x888888888888888889999 9(90989@9H9P9X9`9h9p9x9999999999999999: ::$:0:<:H:T:`:l:x::::::::::::;; ;,;8;D;P;\;h;t;;;;;;;;;;;;;< <<<0<8<@>>$>,>4>@>H>P>\>d>l>x>>>>>>>>>>>>>>>? ?? ?(?0?>>!>*>/>7>X>^>d>j>q>}>>>>>>>>>??'?G?o???????0 0)0F0^0i0q0w0~0000000000000011(1-1L1U1Z1`1f1w11111122&22222222 3888894999:^:k:;;H;O;V;b;q;;;;;;<.=U=z=========>>>%>,>2>H>x>>>>>>> ?/?4?B?L?R?Y?_?d?s?x??????HH0c0}00141M1111122&2?222222223,3;3k33333334"4'454?4E4L4R4W4f4k4x44444=5W5556(6H6T6f6x6666;9o9z9999:7:E:N:~:::::::::;; ;;5;G;Y;j;p;;;;;;;;;;<<(<24>I>g>p>}>>>>>>>>>>???%?;?C?O?t??0'070A0J0^000071B1H1O1T1i1r1w1|111111111112222222 323D3K3l3u3333333333!444=4G4U4444444 5*515q5x555556A6d6s666666677G7N7\7u7~777 8*8C8e8888888889 999 9V9[9b9g9W:g::::0>??0011>11111I2P2y22222283m3y3333333444444445#5H5u55555566646R6X6666/7Y7i7v7|77778%8L88v9999 :K:i::::::;;;9;@;;;;}<<=>4>[>c>n>>>>>>>>? ?7?f?|???0"0>0Z0k0000011D1`111 2s2223%3.3633344X4v4444444Q5i555 66'666T6r6{666667 7 717>77778888888888$979@9c997:@::::!;*;J;;;G,>>>> ?4?D?Z?b?r?x?????  Q000000t11111112;2Q33333333444&414u4~444444444 5;5G5555555[6`6m6s6666666667T7\7g7m7t777777778X8^8d8k8888889999%9999:$:`:::::::5;;;<<=#>.>F>>>>>>>????????????0lE0K0P0V0Z0e0j0p000000000000001111#1-131:1A1J1P1g1l1z1111112X2_2l2s2222222(3/3U3`333333%4D4l4~44455*545C5c5555560676R6l666667f77777788K8c8~8888?9V9}9999999:?:N:\:c:z:::::;&;Y;_;f;u;;;;<4<^<<<<<=%=.=4=<=G=O=X=^=f=q============>>>*>/>6>G>d>i>v>}>>>>>>>A????@0(0;0S0Y0x000000000000001101W1d111E3e3588/8m8y88888888';/;E;M;];e;u;};;;;;;;;;;;;;< <.<==f>$?/?8?A???P0(0P0^0g0s00001C11112b22223m34C4K4S4^4f4m4u4}444444444I5Y5m5y5555556666E6V6t6666666 757F7c7777778#8@8h8888889%9<9Y999999:-:>:[::::::;.;A;R;o;;;;D>>>>?%?:?g?|???????`0b0r000001m1~1112222p3v333333X4S6X6p666666666666666666666666666 7Z7m7?8J8l8888,9_999999999::::3:}:::::i;<<<< ==|=====>>&>n>~>>>>>>>>>p00P0_00000111N1V1111111C222*373H333334]4n4~4445(525h555556)6q6668889#9W9e9u::;T;p;2>?V?@0000121C111262D2]2b2k2223 33I3~333 44+4<4]4d4i4o4u4{444444444444444444444444455'5+5/53575;5?5C5G5K5555556656?6K6a6w6666666666666 7S7777777q8888 99+999:%:,:1:::e:{:::(;7;;;;1>@>Z>>>> ??0?6?E?^?i?x????d0v0{00000000111(1=111111152222223*323A3S3`3e3n334$4x44 5!5@5N556F666666787X777777$8888999i9999: :-::::;!;v;;;;;;<<5<<W>>>4?y???Z0q000u11112G2f2233~3344 55O6[66x9999:<:D:{::::;6;n;t;~;;;;;;<<"<1<:4>R>a>>>>>.?c?????000'0-060H0\0o00001112T3o33$4`4q44445C5\555556"6A6`666666777C7`7z77777788C8Z8i8w88888!9&969G9j9p9|99999999999999999999:: : :::::=:B:H:N:T:Z:`:f:l:r:x:~::::::::::::::::::::::::::;; ;;;;;;#;';+;/;3;7;;;?;C;G;K;t;~;;;;;;;;;;;;;;;< <<<<%<)<-<1<5<9<=%>5>e>s>x>>>>>> ??? ?8?J?b?t???x0U0s00011%171D1[1r11111112 22!2(2-272I2R2Y2^2h2t2z2222222222222233#3C3Z3r333333444;4@4F4L4R4X4^4d4j4p4v4|444444444444444444456667*7M7_7{7777898L8t888888989N9v9999999:9:I:::: ;/;G;\;w;;;;;<)0>5>H>~>>>T?Z?p???0^0g00000 11,1?1p111111 2%2>2X2z2223j3o3~333344444+5P55555*676I6O6j6}66667"7u7|999 :;:B:N:x:::;;'<18C88889<9z999999::;;;D;L;u;;;;;;<<<==t===>>B?I?o???070N00000.1n111?2m22223;334j444V555555556F6L6W6;7r77777w88889B99 :;@;U;;;<>>>>????060000+1O11112 222h2222!323M3f3z33333H5i55 6(6R6667&777R7q77778'8F8s88S9999:y:::J;r;;;:d>>>>9?x?????T0Q001 1S122333444$4*40464<4B4H4N4T4Z4`4f4l4r4x4~444444444444444444444444445 5555"5(5.545:5@5F5L5R5X5^5d5j5p5v5|555555555555555555555555555566 6 66666!6%6)6-6166667K7777)8K8Z8}889?9N9t9999":B::::;J;X;;;;[???????? X0/040>0P0l0q0{0000011Q223@3r3333445555555555555560M1l1111124444445 515A5M5u5{555555556 66 6'6Q6\6r6w6}66666666777d7x7V88N999:::;;/;I;N;f;;;;;;;;;;;;;C5>>>>>:???W?x??@Q0V0n00 1%1=1^123445/5;5?5C5G5K5O5S5W5[5_5c5g5k5o5s5N7S7i7777777778&8+8C8d8888889J9::D;H;L;P;T;X;\;`;d;h;l;p;t;x;|;"?????P011|222223`3>44444Z5d5{5555556.6D6Z6p666666667%7/7F7f7r7|77777778 888888"8&8*8.82868:8>88888"9,9C9b999999:$:;;n>>>>>?????`!0:0M0e00001 1"1+1Q1_1k111111%222 3+3I3S33"4Q4b44444444#565L5R5s5y55567~:::::::;>>!?/?r?p1b6!77::G?@v01567]88499:6;<=============>??he1123f4m4t4444I537 8Z888849v9999:U:;P;l;U<^<}<<<<$====>7>>>2?f?????=000011@1M1u1z22 33R3f333$4[4444444 555]5777\8n8888888899%9X9^9e999999999:,:2:9:b:h:o:::::::;<;B;I;{;;;;<>> ?(???????:051E1e11111P3b33333344X4555555<6?7O7o777788 88889A9y99999#: ;;=;;;;< <'>>O>y>>>>>?????xG0l01$1D1p1v1}112222-333:3333 4484>4E444(5y66677778D8{88899%99(F>|>>>S?M0_001R112h22445@6F6M6x6~666666667#7*7L7R7Y77777778:8@8G8r8x88888 9999):S:Y:`:::;;;;; ?b??@%0700001+1V1112&23778Y8_88888h9s99|:>?Q134E6#;<? 0025 69<<G>T>a>n>>>>?0`D0Q0^0k0E1Z1W2d2q2~222i3u3333g6::;;;;;;mJ>w>{>>>>>>>?@00A12<3Z33<}>>?=?u???P0>0p0000&1A1q11 22,2H2V2u222222&363V3r3333.444l4v44475A5555s6667*7T7b777788b8j8888,9d9v9999):5:f:r::::: ;;;;;<<<:c>>` ??p< 000(0.0>0D0K0Y0_001@1F1M1[1a1q1w1~1111:;<7m9Q:;>? 14E6778888888272224n5 <z> ?6?K?P?U?v?{???d00W11111222$2*20262Q2f2m2s22223D3V333333333344 444"4)40474?4G4O4[4d4i4o4y444444445 5555#5*51585?5F5M5U5]5e5p5u5{55555 66/6?6b6667977758D8M8Z8v88888]9i99P:i:s::::`;q;v;;;;;;;F >>>>T>`>l>x>>>>>>>>>>>>?? ?,?8?D?P?\?h?t???????????l000&020>0J0r2E3~333445556K66667^7778s88`99:a::;g;;;>>-?e?? :0001O111 2R2223O3333X4445R5556D6t666.7^7778[8889A9999:W::::<;l;;;3<<<<,=z===%>p>>>??o???0,000 1d1112]2223`3334U444 5I555606`6666-7`777 8T8889*9o999":E:::;;u;;/0>`>>>>?K????@010a0000111A1Q1b1k1q1111111111122!212A2Q2a2q22222222223 3(30383D3d3l3x33333334 4@4P4l4p4|44444445 5585H5l5t5|5555555555 666$6,646<6D6L6T6\6d6l6t6|666666666666667747<7D7P7t7|7777777777788848<8H8P8h8x8888888888 9,989X9`9h9t99999999999: ::8:D:d:l:x::::::::::; ;;;(;0;d;t;;;;;;;<<<<> >,>4>T>\>x>>>>>>>>>>?$?0?P?X?`?h?t????????P000080@0H0T0t0|0000000001 1(141T1\1d1p111111112 2,282X2`2l2222222223(343T3`33333333334$404P4X4`4l444444445$5D5P5p5|55555556(646T6`66666666 7787D7d7p77777778 8@8L8l8x88888889 9,989X9d99999999:: :(:0:<:\:h::::::::; ;@;L;l;x;;;;;;;<$<,<4<@<`> >@>H>P>X>t>|>>>>>>>>>?(?4?T?`???????`0000<0\0h0000000000111$1D1L1T1p1x11111111112222 202<2D2d22222222223333 303<3D3x33333333334444<4D4P4p4|44444444445$5,545<5H5h5t555555555556 66 6(6\6l6x66666666677$7D7P7p7|7777778 8,848h8x88888889 99 9T9d9p99999999:(:H:T:t:::::::: ;; ;D;P;X;;;;;;;;<<<<,<4http://www.microsoft.com/pki/certs/MicRooCerAut_2010-06-23.crt0  *H  C_?锌;\hT41L Epj 3!ΘA~L"0))?E)κE'TXٖTx*:Қj;: 7oSn>Ą|$.9`qҬ1i jcG᨞7_ eN/kцoLyNi(eF5g [q݌ZI}!?2KeMԦGc:sQI!!w\yMxJ*g4?#~v̋Z9PXGdMrlq1gB0')‚*E]lߥNtX׏1A=| m5߈!9#0&8d4;qy!=NQOQV~崀y.c~xDɻۣ 1~`m~iˈLH}UK4.'5 rw>]T*Dd)Uw003nS0  *H  0_1 0 UUS10U Microsoft Corporation100.U'Microsoft Windows Code Signing PCA 20240 250508182454Z 260506182454Z0t1 0 UUS10U Washington10URedmond10U Microsoft Corporation10UMicrosoft Corporation0"0  *H 0 & ^K E#ESӑq&ao+L*䜥| \at(Bf-BE,9$ snuq hmQ(ΙOC_tAn/a5wh1ƇQ;ipD(F@)Q`ʶ^^zr!0'Ch[y8N)V@)&29bC#5c ްjMp$P"@7u(}Y/s)9E WY+4G_cEK`ν)Mɏ f <Vuu*Q٣n"`}VW^C t%=7 ԅ; to0<:0810U Microsoft Corporation10U 230865+5045810U#0׌4ګe0jUc0a0_][Yhttp://www.microsoft.com/pkiops/crl/Microsoft%20Windows%20Code%20Signing%20PCA%202024.crl0w+k0i0g+0[http://www.microsoft.com/pkiops/certs/Microsoft%20Windows%20Code%20Signing%20PCA%202024.crt0  *H  ~͑8{^1"N-0ỗQpޚ har~<>O͐y7^U]dNpB$m]9jC94up# /8}iM*.ȷwH-Ums8ȵ+! ==(- ӱi]IW~:l7|U"wǻD +,$W%|E"C#v2Hv ΁L͵NkmFfU-xd@ nIRw^LMLD'=R_7 E.1+ȑb)(˟%|k@m"Nc=`U? M]2(ح ArD /Kjf񴮟Φl*ͭ)%Cy#]+;HzǽGn;6?|`p0YU'(f Z,[iqeT][QJa{LI2]$&UX"Kfdʗ);100v0_1 0 UUS10U Microsoft Corporation100.U'Microsoft Windows Code Signing PCA 20243nS0  `He0 *H  1  +70/ *H  1" Ta%M-uPIqt MN90Z +7 1L0J$"Microsoft Windows" http://www.microsoft.com/windows0  *H 4}T2jB6 үZfcQ]qN3$"7p cs{2 Ai.J Cy9h}OQTJ3eAcs-A#G^y]{mnǵeMx1:ZScAռ6kQEQBҰ}̙r |IA|W'(3c||3JAcv(x Ce ̐ dnaHA>O"NM˭-b̽@?ưTRtJH-slִ j$T\Ѣp$=Ht>95zujGNbʑnU5dqQޭQ*)5^<;P}K\ X8D͠9Uv׶y[q膶ɸ۬bݨh4mnN?o٫,r#p.wY6R*Gk6 Q C˒5/lJL|]cIVkc؎@ >q0 +710 *H 010  `He0Z *H  IE0A +Y 010  `He ֧ 8ʞ1hjhl7Ifis0^20260126222541.753Z0٤01 0 UUS10U Washington10URedmond10U Microsoft Corporation1-0+U $Microsoft Ireland Operations Limited1'0%U nShield TSS ESN:2A1A-05E0-D9471%0#UMicrosoft Time-Stamp Service0(0390  *H  0|1 0 UUS10U Washington10URedmond10U Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 20100 250814184812Z 261113184812Z01 0 UUS10U Washington10URedmond10U Microsoft Corporation1-0+U $Microsoft Ireland Operations Limited1'0%U nShield TSS ESN:2A1A-05E0-D9471%0#UMicrosoft Time-Stamp Service0"0  *H 0 8N{g 5-`GnE[ eSli+Eġ'%QpTPg} #3fIciVBeT-ȗW߯SI=@YuwJ㌎[9 ˈ/|3re場A=Vy k ѷ}X+:x uw>V4)US39bOV셏va'x 4eV7qrl6I[ ui"ycCº6]~Y=7?dqkIg;T0aY,vB04 ><{hjʧ';MMn)I0E0UoE٫RdKH~dz0U#0]^b]eS5r0_UX0V0TRPNhttp://www.microsoft.com/pkiops/crl/Microsoft%20Time-Stamp%20PCA%202010(1).crl0l+`0^0\+0Phttp://www.microsoft.com/pkiops/certs/Microsoft%20Time-Stamp%20PCA%202010(1).crt0 U00U% 0 +0U0  *H  +;z(ίtEj_Zȋ.nə&qeLt<<4W6Cax^HG+qny tN f"#wH~픋p4iJ:ĸ=Ih?;)OҜCéaX;Δ8(mx7ڠtXA.)',XeJpk:m!"o8TFc;͂~{x93> ZAϝ )KQ aJ5(24c9ӹϼCH 0q0Y3kI0  *H  01 0 UUS10U Washington10URedmond10U Microsoft Corporation1200U)Microsoft Root Certificate Authority 20100 210930182225Z 300930183225Z0|1 0 UUS10U Washington10URedmond10U Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 20100"0  *H 0 Lr! y$yՂҩlNu5WlJ⽹>`3\OfSqZ~JZ6gF# w2`}jRDFkvPDq\Q17 8n&S|9azĪri65&dژ;{3[~Rb%j]SVMݼ㑏9,Qpi 6-p15(㴇$ɏ~TUmh;Fz)7EFn20\O,b͹⍈䖬Jq[g`= s}AFu_4 }~ٞE߶r/}_۪~66L+nQsM7t4G|?Lۯ^s=CN39LBh.QFѽjZasg^(v3rק  co 6d[!]_0tعP a65Gk\RQ]%PzlrRą<7?xE^ڏriƮ{>j.00 +70# +7*RdĚhttp://www.microsoft.com/pki/certs/MicRooCerAut_2010-06-23.crt0  *H  U}*,g1$[rKo\>NGdx=139q6?dl|u9m1lѡ"fg:SMݘx6.Vi {jo)n?Hum m#TxSu$Wݟ=heV(U'$@]='@8)üTB  jBRu6as.,k{n?, x鑲[It 쑀=J>f;O2ٖtLrou04zP X@1Q{p( 6ںL 4$5g+ 挙"'B=%tt[jў>~13}{8pDѐȫ::bpcSMmqjU3XpfY0A0٤01 0 UUS10U Washington10URedmond10U Microsoft Corporation1-0+U $Microsoft Ireland Operations Limited1'0%U nShield TSS ESN:2A1A-05E0-D9471%0#UMicrosoft Time-Stamp Service# 0+:̟پyHR 0~0|1 0 UUS10U Washington10URedmond10U Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 20100  *H  " 0"20260126160841Z20260127160841Z0w0= +Y 1/0-0 " 0 0c0 #a06 +Y 1(0&0  +Y  0 00  *H  ^z=}z 2&~+;Z}Ôviv{,'߷F0Πn0>*-8Q?o7<"ay#_Pzےd $GިW*z;UU1?+sˋ9.SN!쭵ܵϬ_ Jw&{/l{vAnbHn teelͱC]F#Q&J`!˻wP;Df-OF71 0 00|1 0 UUS10U Washington10URedmond10U Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 2010390  `HeJ0 *H  1  *H  0/ *H  1" ^sZ_{TV}+blw{uJ'y20 *H  /1000 !~cR!Aa’Ls'c00~0|1 0 UUS10U Washington10URedmond10U Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 2010390" -R-d @G]eڒSϽ0  *H  }ChߘZ470`9-٣xs@03HlC6 .׷Dd+KOΝ}kl 6|?_HHE8c@( E{<[ ee7+Kjn}۽q$q*<l>2ݴ1YzC+fൢ )G-f0qzH:(]=ȵ#{{ڑ#*6Q(hcg[dB5:@-5)7 c.ͪ P }9gw}D-(K+aUm;)t4-xn[[8?+͹ 1+ÍGm9.:EX{)MifR#t&HYt=cUƸVd"9ĸK