<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>138048</bug_id>
          
          <creation_ts>2014-10-24 11:05:20 -0700</creation_ts>
          <short_desc>Web Inspector: Generate ObjC inspector protocol types and alternate dispatcher interfaces</short_desc>
          <delta_ts>2014-10-30 15:09:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>buildbot</cc>
    
    <cc>burg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>rniwa</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1043982</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-24 11:05:20 -0700</bug_when>
    <thetext>Now that we have support for augmenting the inspector protocol. Implement ObjC alternate dispatchers, and include ObjC Inspector Protocol types to do basic shape checking of protocol types (required arguments, etc).

These ObjC interfaces will actually be generated for a WebInspector.framework because we felt JavaScriptCore.framework was not the right place. This is the reason the python generator scripts are still exported as private headers.

Note, the generated ObjC relies on some static sources that exist outside the generator because they don&apos;t need to be generated. I&apos;ll attach these static sources and the resulting sources generated from CombinedDomains.json.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043983</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-10-24 11:05:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/18764961&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043994</commentid>
    <comment_count>2</comment_count>
      <attachid>240416</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-24 11:20:00 -0700</bug_when>
    <thetext>Created attachment 240416
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043996</commentid>
    <comment_count>3</comment_count>
      <attachid>240417</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-24 11:21:13 -0700</bug_when>
    <thetext>Created attachment 240417
[PACKAGE] Static and Generated Sources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043998</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-24 11:23:26 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043999</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-24 11:23:39 -0700</bug_when>
    <thetext>Attachment 240416 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:71:  [FrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;FrontendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:58:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of &apos;ObjectiveCTypesInternalHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:59:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of &apos;ObjectiveCTypesInternalHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:62:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of &apos;ObjectiveCTypesInternalHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:85:  [BackendDispatcherHeaderGenerator._generate_alternate_handler_forward_declarations_for_domains] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:107:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:197:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_alternate_backend_dispatcher_header.py:78:  [AlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;AlternateBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:81:  [BackendDispatcherImplementationGenerator._generate_handler_class_destructor_for_domain] Instance of &apos;BackendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:101:  [BackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;BackendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:49:  [ObjectiveCConfigurationImplementationGenerator.domains_to_generate] Instance of &apos;ObjectiveCConfigurationImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:66:  [ObjectiveCConfigurationImplementationGenerator.generate_output] Instance of &apos;ObjectiveCConfigurationImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:97:  [ObjectiveCConfigurationImplementationGenerator._generate_handler_implementation_for_command] Instance of &apos;ObjectiveCConfigurationImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:105:  [FrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;FrontendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:62:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:63:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:64:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:65:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:73:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:114:  [ProtocolTypesHeaderGenerator._generate_forward_declarations] Instance of &apos;ProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:153:  [ProtocolTypesHeaderGenerator._generate_typedefs_for_domain] Instance of &apos;ProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:172:  [ProtocolTypesHeaderGenerator._generate_builders_for_domain] Instance of &apos;ProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:134:  [generate_from_specification] Undefined variable &apos;BackendCommandsGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:140:  [generate_from_specification] Undefined variable &apos;ProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 24 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044000</commentid>
    <comment_count>6</comment_count>
      <attachid>240416</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-24 11:24:07 -0700</bug_when>
    <thetext>Comment on attachment 240416
[PATCH] Proposed Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=240416&amp;action=review

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:101
&gt; +    # Generate ObjC types, command handlers, and event dispatchers for a subset of domains.
&gt; +
&gt; +    DOMAINS_ON_TOP_OF_JAVASCRIPT_DOMAINS = [&apos;CSS&apos;, &apos;DOM&apos;, &apos;DOMStorage&apos;, &apos;Network&apos;, &apos;Page&apos;]

Despite the whitelist, I have tested that we can generate type/command/event interfaces for all domains. However we do not anticipate needing to generate ObjC interfaces for all domains (e.g. ApplicationCache, LayerTree, ...) so we only generate for a subset of domains. Tweaked in the functions below for each generator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044876</commentid>
    <comment_count>7</comment_count>
      <attachid>240416</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-10-29 15:45:45 -0700</bug_when>
    <thetext>Comment on attachment 240416
[PATCH] Proposed Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=240416&amp;action=review

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:39
&gt; +def strip_comment_markers(str):

strip_block_comment_delimiters

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:54
&gt; +for key, value in _OBJC_IDENTIFIER_RENAME_MAP.items():

Map comprehension: dict((v,k) for k, v in map.iteritems())

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:65
&gt; +    def category_of_type(_type):

I prefer from_type, category_from_type or category_for_type.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:67
&gt; +            if _type.raw_name() == &apos;string&apos;:

_type.raw_name() is &apos;string&apos;

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:69
&gt; +            if  _type.raw_name() == &apos;object&apos; or _type.raw_name() == &apos;any&apos;:

_type.raw_name() in [&apos;object&apos;, &apos;any&apos;]

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:101
&gt;&gt; +    DOMAINS_ON_TOP_OF_JAVASCRIPT_DOMAINS = [&apos;CSS&apos;, &apos;DOM&apos;, &apos;DOMStorage&apos;, &apos;Network&apos;, &apos;Page&apos;]
&gt; 
&gt; Despite the whitelist, I have tested that we can generate type/command/event interfaces for all domains. However we do not anticipate needing to generate ObjC interfaces for all domains (e.g. ApplicationCache, LayerTree, ...) so we only generate for a subset of domains. Tweaked in the functions below for each generator.

This name is weird, why not call it WEBCORE_DOMAINS_TO_GENERATE?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:171
&gt; +    def objc_accessor_type_for_raw_name(raw_name):

(Applies throughout) use str in [&apos;a&apos;, &apos;b&apos;, ...] to tighten these lines.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:197
&gt; +    def objc_class_for_raw_name(raw_name):

It&apos;s not obvious to me (not on ObjC expert) when either of these methods are more appropriate.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:209
&gt; +    def protocol_type_for_raw_name(raw_name):

(Next two methods) Is this different from what the C++ generator does? If so, why?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:257
&gt; +    def objc_accessor_type_for_member_internal(_type):

(Several cases below) In similar code for C++ generator, it first unwraps aliased types then does instance checks. I think I prefer this to explicit depth-1 recursion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044903</commentid>
    <comment_count>8</comment_count>
      <attachid>240416</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-29 16:19:00 -0700</bug_when>
    <thetext>Comment on attachment 240416
[PATCH] Proposed Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=240416&amp;action=review

&gt;&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:101
&gt;&gt;&gt; +    DOMAINS_ON_TOP_OF_JAVASCRIPT_DOMAINS = [&apos;CSS&apos;, &apos;DOM&apos;, &apos;DOMStorage&apos;, &apos;Network&apos;, &apos;Page&apos;]
&gt;&gt; 
&gt;&gt; Despite the whitelist, I have tested that we can generate type/command/event interfaces for all domains. However we do not anticipate needing to generate ObjC interfaces for all domains (e.g. ApplicationCache, LayerTree, ...) so we only generate for a subset of domains. Tweaked in the functions below for each generator.
&gt; 
&gt; This name is weird, why not call it WEBCORE_DOMAINS_TO_GENERATE?

Yeah, a better name would be just DOMAINS_TO_GENERATE. It is already in an &quot;ObjC&quot; named class. This will be for WebInspector.framework not WebCore.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:209
&gt;&gt; +    def protocol_type_for_raw_name(raw_name):
&gt; 
&gt; (Next two methods) Is this different from what the C++ generator does? If so, why?

I should work towards removing these. Originally I generated ObjC types on top of TypeBuilder/Inspector::Protocol so I built these up as I went. I then switched to just making ObjC types on top of InspectorObject/Inspector::Unchecked, and these got left behind but are kinda used in one case to figure out a particular array conversion.

I had a FIXME comment to convert to using the C++ generator versions and never did it. I believe there was some subtle difference but I can&apos;t remember now. I&apos;ll add back the FIXME and look into removing them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044951</commentid>
    <comment_count>9</comment_count>
      <attachid>240416</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-10-29 18:55:22 -0700</bug_when>
    <thetext>Comment on attachment 240416
[PATCH] Proposed Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=240416&amp;action=review

Overall it looks quite good and clean. Miscellaneous comments that apply across many files, and should be addressed:

 * #if ENABLE(FEATURE) guards are not emitted for most generated files. Test case: generate-domains-with-feature-guards.json
 * Why aren&apos;t RWIProtocol.h, RWIProtocolJSONObjectInternal.h, etc included in this patch?
 * Will WebInspector.framework be added to the Xcode solution? Not sure where the generated files end up... or is the generated code used only externally?

Please post a revised patch before landing. :)

&gt; Source/JavaScriptCore/ChangeLog:26
&gt; +        Event dispather interfaces are straight forward, just packaging up the arguments and sending

typo: &apos;dispatcher&apos;

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:325
&gt; +        if category == ObjCTypeCategory.Simple or category == ObjCTypeCategory.String:

(multiple places)

category in [...]

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:329
&gt; +        if category == ObjCTypeCategory.Object:

(multiple places)

if category is ObjcTypeCategory.Array:

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:49
&gt; +        return filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self))

(Applies to all new generators)

In lieu of returning filter function objects, you can use functools.partial to do the equivalent of JavaScript&apos;s Function.prototype.bind:

import functools

...

return filter(functools.partial(ObjCGenerator.should_generator_domain_command_handler, self.model()), Generator.domains_to_generate(self))

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:102
&gt; +        # FIXME: Throw exception for nil required return parameters.

Please file a bug and add the bugzilla link here.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_header.py:88
&gt; +    def _variableNamePrefixForDomain(self, domain):

use_lower_case_names_please

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:61
&gt; +        self._command_filter = ObjCGenerator.should_generate_domain_command_handler_filter(self.model())

I would go this way, passing in the domain and command. Then callsites don&apos;t need to duplicate this code.

def _should_generate_commands():
    return domain.commands and ...

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:73
&gt; +        lines = []

I would have made this into a template. It&apos;s long and the two stray .extends are hard to see.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:93
&gt; +            if domain.commands and self._command_filter(domain):

See above.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:102
&gt; +    def _generate_ivars(self, domains):

Is &apos;ivars&apos; an ObjC term?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:144
&gt; +    def _variableNamePrefixForDomain(self, domain):

This guy again. Maybe he should be in ObjCGenerator.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_conversion_helpers.py:46
&gt; +class ObjectiveCConversionHelpersGenerator(Generator):

Why ObjC in some places but ObjectiveC here? I like the short version.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:67
&gt; +        # FIXME: Currently we generate enums/types for all types in the type_domains.

Bug number!

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:70
&gt; +        # of event_domains.

typo: &apos;or&apos;

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:113
&gt; +                    add_whitespace_separator(lines)

Can this be add_newline() instead?

&gt; Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result:1623
&gt; +// DO NOT EDIT THIS FILE. It is automatically generated from commands-with-async-attribute.json

Now that we have umpteen generators, this comment should also say which generator created the file :)
Of course, this can be a separate bug.

&gt; Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result:1630
&gt; +

I wish there was an easy way for the generator to say &quot;don&apos;t bother outputting this file for test results&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045075</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-30 12:15:41 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 240416 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240416&amp;action=review
&gt; 
&gt; Overall it looks quite good and clean. Miscellaneous comments that apply
&gt; across many files, and should be addressed:
&gt; 
&gt;  * #if ENABLE(FEATURE) guards are not emitted for most generated files. Test
&gt; case: generate-domains-with-feature-guards.json

This is intentional. I did not want to generate ENABLE guards for the ObjC files, hence the change to wrap_with_guard_for_domain which doesn&apos;t include wraps:

    def wrap_with_guard_for_domain(self, domain, text):
        if self.model().framework is Frameworks.WebInspector:
            return text
        ...


&gt;  * Why aren&apos;t RWIProtocol.h, RWIProtocolJSONObjectInternal.h, etc included
&gt; in this patch?
&gt;  * Will WebInspector.framework be added to the Xcode solution? Not sure
&gt; where the generated files end up... or is the generated code used only
&gt; externally?

The WebInspector.framework will remain external for now.

The static RWIProtocolJSONObject* files live in that project. I didn&apos;t include them here because, being static, it is more convenient to put them in the project they are a part of. I realize that is a bit backwards, since the generated code depends on them, but they are rather small. Exporting them from JSC as private headers is possible, but inconvenient (we have build phases that check ObjC class prefixes exported from the frameworks that we would need to open up to the &quot;RWI&quot; prefix).


&gt; Please post a revised patch before landing. :)

Okay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045099</commentid>
    <comment_count>11</comment_count>
      <attachid>240692</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-30 13:39:00 -0700</bug_when>
    <thetext>Created attachment 240692
[PATCH] Proposed Fix

This should address all review comments except the functools.partial as I didn&apos;t see it being too much of a benefit. That can always be cleaned up later if you consider it cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045101</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-30 13:41:36 -0700</bug_when>
    <thetext>Attachment 240692 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:71:  [FrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;FrontendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:58:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of &apos;ObjectiveCTypesInternalHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:59:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of &apos;ObjectiveCTypesInternalHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:62:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of &apos;ObjectiveCTypesInternalHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:85:  [BackendDispatcherHeaderGenerator._generate_alternate_handler_forward_declarations_for_domains] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:107:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:197:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_alternate_backend_dispatcher_header.py:78:  [AlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;AlternateBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:81:  [BackendDispatcherImplementationGenerator._generate_handler_class_destructor_for_domain] Instance of &apos;BackendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:101:  [BackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;BackendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:49:  [ObjectiveCConfigurationImplementationGenerator.domains_to_generate] Instance of &apos;ObjectiveCConfigurationImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:66:  [ObjectiveCConfigurationImplementationGenerator.generate_output] Instance of &apos;ObjectiveCConfigurationImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:97:  [ObjectiveCConfigurationImplementationGenerator._generate_handler_implementation_for_command] Instance of &apos;ObjectiveCConfigurationImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:105:  [FrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;FrontendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:62:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:63:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:64:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:65:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:73:  [ObjectiveCHeaderGenerator.generate_output] Instance of &apos;ObjectiveCHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:114:  [ProtocolTypesHeaderGenerator._generate_forward_declarations] Instance of &apos;ProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:153:  [ProtocolTypesHeaderGenerator._generate_typedefs_for_domain] Instance of &apos;ProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:172:  [ProtocolTypesHeaderGenerator._generate_builders_for_domain] Instance of &apos;ProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:167:  trailing whitespace  [pep8/W291] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:134:  [generate_from_specification] Undefined variable &apos;BackendCommandsGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:140:  [generate_from_specification] Undefined variable &apos;ProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 25 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045141</commentid>
    <comment_count>13</comment_count>
      <attachid>240692</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-30 15:09:05 -0700</bug_when>
    <thetext>Comment on attachment 240692
[PATCH] Proposed Fix

Clearing flags on attachment: 240692

Committed r175385: &lt;http://trac.webkit.org/changeset/175385&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045143</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-30 15:09:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240416</attachid>
            <date>2014-10-24 11:20:00 -0700</date>
            <delta_ts>2014-10-30 13:39:00 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>objc-1.patch</filename>
            <type>text/plain</type>
            <size>451554</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDAyYzI1MzEuLjM1N2VjM2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMiBAQAorMjAxNC0xMC0yNCAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEdlbmVy
YXRlIE9iakMgaW5zcGVjdG9yIHByb3RvY29sIHR5cGVzIGFuZCBhbHRlcm5hdGUgZGlzcGF0Y2hl
ciBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBHZW5lcmF0ZSBPYmplY3RpdmUtQyBpbnRlcmZhY2VzIGZvciBpbnNwZWN0b3IgcHJvdG9j
b2wgdHlwZXMsIGNvbW1hbmQsIGFuZCBldmVudCBkaXNwYXRjaGVycy4KKyAgICAgICAgVGhpcyBp
cyB2ZXJ5IG11Y2ggbGlrZSB0aGUgSW5zcGVjdG9yUHJvdG9jb2xUeXBlcywgQmFja2VuZERpc3Bh
dGNoZXJzLCBhbmQgRnJvbnRlbmREaXNwYXRjaGVycywKKyAgICAgICAgYnV0IHdpdGggYW4gT2Jq
QyBzcGluIG9uIHRoaW5ncy4KKworICAgICAgICBUaGUgcHJpdmF0ZSBBUEkgdGhhdCBjbGllbnRz
IHdvdWxkIHVzZSBpcyBhbGwgZW5jYXBzdWxhdGVkIGluIFJXSVByb3RvY29sLmguIEl0IGluY2x1
ZGVzIHRoZQorICAgICAgICB0eXBlcyBpbnRlcmZhY2VzLCBjb21tYW5kIGhhbmRsZXIgcHJvdG9j
b2wsIGFuZCBldmVudCBkaXNwYXRjaGVyIGludGVyZmFjZS4gV2hlcmUgcG9zc2libGUgdGhlCisg
ICAgICAgIEFQSSB1c2VzIHJlYWwgZW51bXMsIHdoaWNoIGhpZGVzIHRoZSByYXcgcHJvdG9jb2wg
ZW51bSBzdHJpbmdzIGZyb20gY2xpZW50cy4KKworICAgICAgICBJbnNwZWN0b3IgcHJvdG9jb2wg
dHlwZXMgYXJlLCBsaWtlIEluc3BlY3RvclByb3RvY29sT2JqZWN0cywgYnVpbHQgb24gdG9wIG9m
IGFuIEluc3BlY3Rvck9iamVjdC4KKyAgICAgICAgVGhpcyBvZmZlcnMgdGhlIGZsZXhpYmlsdHkg
b2YgYWRkaW5nIGFyYml0cmFyeSBrZXkvdmFsdWVzIHVzaW5nIHRoZSBSV0lQcm90b2NvbEpTT05P
YmplY3QKKyAgICAgICAgaW50ZXJmYWNlLCB3aGljaCBtYXkgYmUgcmVxdWlyZWQgZm9yIGNlcnRh
aW4gcHJvdG9jb2wgb2JqZWN0cyBsaWtlICJOZXR3b3JrLkhlYWRlcnMiIHdoaWNoCisgICAgICAg
IGhhdmUgbm8gZmllbGRzLCBidXQgZXhwZWN0IGFyYml0cmFyeSBwcm9wZXJ0aWVzIHRvIGJlIGFk
ZGVkLgorCisgICAgICAgIENvbW1hbmQgaGFuZGxlciBwcm90b2NvbHMgYWx3YXlzIGhhdmUgdHdv
IGNhbGxiYWNrcy4gQW4gZXJyb3IgY2FsbGJhY2sgYW5kIGEgc3VjY2VzcyBjYWxsYmFjay4KKyAg
ICAgICAgVGhlIHNpZ25hdHVyZSBpcyB2ZXJ5IG11Y2ggbGlrZSBCYWNrZW5kRGlzcGF0Y2hlcnMu
IEluIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkaXJlY3RseSB0bworICAgICAgICB0aGUgc2VsZWN0
b3JzLCBhbmQgb3V0IHBhcmFtZXRlcnMgYXJlIGRlZmluZWQgYnkgdGhlIHN1Y2Nlc3MgY2FsbGJh
Y2suIEl0IHdpbGwgYmUgdGhlIGNsaWVudCdzCisgICAgICAgIHJlc3BvbnNpYmlsaXR5IHRvIGNh
bGwgZWl0aGVyIG9mIHRoZXNlIGNhbGxiYWNrcyB0byBjb21wbGV0ZSBoYW5kbGluZyBvZiBhIHJl
cXVlc3QuCisKKyAgICAgICAgRXZlbnQgZGlzcGF0aGVyIGludGVyZmFjZXMgYXJlIHN0cmFpZ2h0
IGZvcndhcmQsIGp1c3QgcGFja2FnaW5nIHVwIHRoZSBhcmd1bWVudHMgYW5kIHNlbmRpbmcKKyAg
ICAgICAgdGhlIG1lc3NhZ2UgdG8gdGhlIGZyb250ZW5kLgorCisgICAgICAgIE9iakMgPC0+IFBy
b3RvY29sIGNvbnZlcnNpb24gaGFwcGVucyBpbiBlYWNoIG9mIHRoZSBnZW5lcmF0ZWQgZmlsZXMu
IEluIHR5cGUgZ2V0dGVycyAvIHNldHRlcnMsCisgICAgICAgIGluIGNvbW1hbmRzIHBhcmFtZXRl
cnMgYW5kIGV2ZW50IHBhcmFtZXRlcnMuIEZvciB0aGlzIHRvIHdvcmsgd2UgZ2VuZXJhdGUgY29u
dmVyc2lvbiBoZWxwZXJzCisgICAgICAgIGZvciBhbGwgZW51bXMsIE9iakMgZW51bSA8LT4gcHJv
dG9jb2wgc3RyaW5ncy4gRm9yIE5TQXJyYXkgPC0+IEluc3BlY3RvckFycmF5IHRoZXJlIGFyZSBz
b21lCisgICAgICAgIHN0YXRpYyBoZWxwZXJzIHRvIGRvIHRoZSBjb252ZXJzaW9ucy4gV2UgZG8g
bG9zZSBzb21lIHR5cGUgc2FmZXR5IGluIHRoZXNlIGNvbnZlcnNpb25zLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHk6CisgICAgICAgIChBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2FsdGVybmF0ZV9oYW5kbGVyX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9kb21haW5zLkFs
dGVybmF0ZUluc3BlY3Rvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAg
IChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAg
ICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9o
YW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoRnJv
bnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAg
IChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfYy5weTogQWRkZWQuCisgICAgICAg
IChqb2luX3R5cGVfYW5kX25hbWUpOgorICAgICAgICAoc3RyaXBfY29tbWVudF9tYXJrZXJzKToK
KyAgICAgICAgKHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIpOgorICAgICAgICAoT2JqQ1R5cGVD
YXRlZ29yeSk6CisgICAgICAgIChPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X29mX3R5cGUpOgor
ICAgICAgICAoT2JqQ0dlbmVyYXRvcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLmlkZW50aWZp
ZXJfdG9fb2JqY19pZGVudGlmaWVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19pZGVu
dGlmaWVyX3RvX2lkZW50aWZpZXIpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3Vs
ZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlw
ZXMpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1h
bmRfaGFuZGxlcl9maWx0ZXIpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9j
b21tYW5kX2hhbmRsZXIpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVf
ZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXIpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5v
YmpjX25hbWVfZm9yX3R5cGUpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24pOgorICAgICAgICAoT2JqQ0dlbmVyYXRv
ci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKToKKyAgICAgICAgKE9i
akNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcik6
CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3Vz
X2VudW0pOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX2FjY2Vzc29yX3R5cGVfZm9yX3Jh
d19uYW1lKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9yYXdfbmFtZSk6
CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3Jhd19uYW1lKToKKyAgICAg
ICAgKE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfcmF3X25hbWUpOgorICAgICAgICAo
T2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5l
cmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZSk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNf
YWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19h
Y2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwpOgorICAgICAgICAoT2JqQ0dlbmVyYXRv
ci5vYmpjX3R5cGVfZm9yX21lbWJlcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfdHlw
ZV9mb3JfbWVtYmVyX2ludGVybmFsKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY190eXBl
X2Zvcl9wYXJhbSk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW1f
aW50ZXJuYWwpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2V4cG9ydF9l
eHByZXNzaW9uX2Zvcl92YXJpYWJsZSk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfcHJv
dG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX21lbWJlcik6CisgICAgICAgIChPYmpDR2VuZXJh
dG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisgICAg
ICAgIChPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3Zh
cmlhYmxlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY190b19wcm90b2NvbF9leHByZXNz
aW9uX2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90b19vYmpj
X2V4cHJlc3Npb25fZm9yX21lbWJlcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfc2V0
dGVyX21ldGhvZF9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19zZXR0
ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5v
YmpjX2dldHRlcl9tZXRob2RfZm9yX21lbWJlcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyX2ludGVybmFsKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHk6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5LgorICAgICAgICAoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yKToKKyAgICAgICAgKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqZWN0aXZl
Q0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAg
ICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnMpOgorICAgICAgICAoT2JqZWN0aXZlQ0JhY2tlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW5zKToKKyAgICAgICAgKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9t
YWluKToKKyAgICAgICAgKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisgICAgICAgIChPYmplY3Rp
dmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKE9iamVj
dGl2ZUNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAg
ICAgICAoT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRw
dXRfZmlsZW5hbWUpOgorICAgICAgICAoT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iamVjdGl2ZUND
b25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAg
ICAgICAgKE9iamVjdGl2ZUNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAgIChPYmpl
Y3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5k
bGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iamVjdGl2ZUNDb25m
aWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tf
Zm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAg
ICAoT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weTogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkuCisgICAgICAg
IChPYmplY3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChPYmpl
Y3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAg
ICAgICAoT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKE9iamVjdGl2ZUNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ludGVyZmFjZV9mb3JfZG9tYWlucyk6CisgICAgICAgIChP
YmplY3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfcHJvcGVydGll
c19mb3JfZG9tYWluKToKKyAgICAgICAgKE9iamVjdGl2ZUNDb25maWd1cmF0aW9uSGVhZGVyR2Vu
ZXJhdG9yLl92YXJpYWJsZU5hbWVQcmVmaXhGb3JEb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBs
ZW1lbnRhdGlvbi5weTogQWRkZWQuCisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmpl
Y3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmls
ZW5hbWUpOgorICAgICAgICAoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iamVjdGl2ZUNCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb25maWd1cmF0aW9u
X2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW5zKToKKyAgICAgICAgKE9iamVjdGl2ZUNCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9pdmFycyk6CisgICAg
ICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfZGVhbGxvYyk6CisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9zZXR0ZXJfZm9yX2RvbWFp
bik6CisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9nZXR0ZXJfZm9yX2RvbWFpbik6Cisg
ICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fdmFyaWFibGVOYW1lUHJlZml4Rm9yRG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weTog
QWRkZWQuCisgICAgICAgIChhZGRfd2hpdGVzcGFjZV9zZXBhcmF0b3IpOgorICAgICAgICAoT2Jq
ZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKToKKyAgICAgICAgKE9iamVjdGl2ZUND
b252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmplY3RpdmVD
Q29udmVyc2lvbkhlbHBlcnNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9i
amVjdGl2ZUNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToK
KyAgICAgICAgKE9iamVjdGl2ZUNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5nZW5lcmF0ZV9v
dXRwdXQpOgorICAgICAgICAoT2JqZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zKToKKyAgICAgICAgKE9iamVjdGl2ZUND
b252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVy
c2lvbl9mb3JfZGVjbGFyYXRpb24pOgorICAgICAgICAoT2JqZWN0aXZlQ0NvbnZlcnNpb25IZWxw
ZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1i
ZXIpOgorICAgICAgICAoT2JqZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIpOgorICAgICAgICAo
T2JqZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX29iamNf
dG9fcHJvdG9jb2xfc3RyaW5nKToKKyAgICAgICAgKE9iamVjdGl2ZUNDb252ZXJzaW9uSGVscGVy
c0dlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKE9iamVjdGl2
ZUNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChP
YmplY3RpdmVDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0
X18pOgorICAgICAgICAoT2JqZWN0aXZlQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmplY3RpdmVDRnJvbnRlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6Cisg
ICAgICAgIChPYmplY3RpdmVDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iamVjdGl2ZUNGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbnMpOgorICAgICAgICAoT2JqZWN0aXZlQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6CisgICAgICAgIChPYmplY3RpdmVD
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50
X3NpZ25hdHVyZSk6CisgICAgICAgIChPYmplY3RpdmVDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRl
ci5weTogQWRkZWQuCisgICAgICAgIChhZGRfd2hpdGVzcGFjZV9zZXBhcmF0b3IpOgorICAgICAg
ICAoT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVy
R2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3Iu
b3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IuZ2Vu
ZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX2VudW1zKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0
b3IuX2dlbmVyYXRlX3R5cGVzKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3Iu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbik6CisgICAgICAgIChPYmpl
Y3RpdmVDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfbWVtYmVy
KToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOgorICAgICAgICAoT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfZW51bSk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9lbnVtLk5TX0VOVU0pOgorICAgICAgICAoT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfdHlwZV9pbnRlcmZhY2UpOgorICAgICAgICAoT2JqZWN0aXZlQ0hlYWRlckdl
bmVyYXRvci5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMpOgorICAg
ICAgICAoT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfbWVtYmVyX3Byb3BlcnR5
KToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2NvbW1hbmRf
cHJvdG9jb2xzKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5l
cmF0b3IuX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iamVjdGl2ZUNI
ZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMpOgorICAgICAgICAoT2Jq
ZWN0aXZlQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZSk6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVf
Y19pbnRlcm5hbF9oZWFkZXIucHk6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5LgorICAgICAgICAoT2JqZWN0aXZlQ1R5cGVzSW50ZXJuYWxIZWFkZXJH
ZW5lcmF0b3IpOgorICAgICAgICAoT2JqZWN0aXZlQ1R5cGVzSW50ZXJuYWxIZWFkZXJHZW5lcmF0
b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iamVjdGl2ZUNUeXBlc0ludGVybmFsSGVh
ZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmplY3RpdmVDVHlwZXNJ
bnRlcm5hbEhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRl
X2ludGVyZmFjZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAgICAgICAo
YWRkX3doaXRlc3BhY2Vfc2VwYXJhdG9yKToKKyAgICAgICAgKE9iamVjdGl2ZUNUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKE9iamVjdGl2ZUNUeXBlc0ltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKE9iamVjdGl2ZUNUeXBlc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmplY3RpdmVDVHlw
ZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAg
KE9iamVjdGl2ZUNUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6
CisgICAgICAgIChPYmplY3RpdmVDVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0
ZV90eXBlX2ltcGxlbWVudGF0aW9ucyk6CisgICAgICAgIChPYmplY3RpdmVDVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KE9iamVjdGl2ZUNUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9pbml0X21l
dGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyk6CisgICAgICAgIChPYmplY3RpdmVDVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc2V0dGVyX2Zvcl9tZW1iZXIpOgorICAgICAg
ICAoT2JqZWN0aXZlQ1R5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2dldHRl
cl9mb3JfbWVtYmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weToKKyAgICAgICAgKFByb3RvY29sVHlwZXNIZWFk
ZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKF9n
ZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9tYWluKToKKyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVy
c19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRvci5weToKKyAgICAgICAgKEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbik6
CisgICAgICAgIChHZW5lcmF0b3IpOgorICAgICAgICAoR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFy
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAoQWx0ZXJuYXRlSW5zcGVjdG9yKToKKyAgICAgICAgKE9iakNJbnNw
ZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5Ogor
ICAgICAgICAoRnJhbWV3b3JrLmZyb21TdHJpbmcpOgorICAgICAgICAoRnJhbWV3b3Jrcyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5OgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdDoKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisKIDIwMTQtMTAt
MjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBQcm92aWRlIGEgd2F5IHRvIGhhdmUgYWx0ZXJuYXRlIGluc3BlY3RvciBhZ2Vu
dHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjhlMGUwZS4uMGZlMTZhMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExOTEsNiArMTE5MSwyNiBAQAogCQlBNUVB
NzBFQjE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1RUE3MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgfTsKIAkJQTVFQTcwRUMxOUY1QjNFQTAwOThG
NUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUExOUY1
QjNENTAwOThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUE1RUE3MEVFMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBF
RDE5RjVCNUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3MEY5MTlG
NkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVBNzBFRjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgfTsKKwkJQTVFQTcwRkExOUY2REU1QTAwOThGNUVD
IC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVF
QTcwRjAxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgfTsKKwkJQTVFQTcwRkIxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMTE5RjZE
RTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9oZWFkZXIu
cHkgKi87IH07CisJCUE1RUE3MEZDMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3Rp
dmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyog
Z2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLzsg
fTsKKwkJQTVFQTcwRkQxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Nv
bnZlcnNpb25faGVscGVycy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTVFQTcwRjMxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbnZlcnNpb25faGVscGVycy5weSAqLzsgfTsKKwkJQTVFQTcwRkUxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1RUE3MEY0MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyB9OworCQlBNUVBNzBGRjE5RjZERTVB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5IGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNTE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5ICovOyB9OworCQlBNUVBNzEwMDE5
RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBG
NjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVy
LnB5ICovOyB9OworCQlBNUVBNzEwMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY3MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0
ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsgfTsKKwkJQTVFQTcxMDIx
OUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5IGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGODE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgKi87IH07CisJCUE1RUE3MTAzMTlGNkRFNkYw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcw
RUYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQTVFQTcxMDQxOUY2REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9j
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYwMTlGNkRFNUEwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcx
MDUxOUY2REU3NDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25f
aGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3Vy
YXRpb25faGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUE1RUE3MTA2MTlGNkRFNzYwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMDcxOUY2REU3
ODAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYzMTlG
NkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMu
cHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVF
QTcxMDgxOUY2REU3QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwOTE5RjZERTdD
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjUxOUY2REU1QTAwOThGNUVD
IC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwQTE5RjZERTdFMDA5OEY1RUMgLyog
Z2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwQjE5RjZERTgwMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNzE5RjZERTVB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcx
MEMxOUY2REU4MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjgxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1RUE3MTBFMTlGNkRGODEwMDk4RjVFQyAvKiBJbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MTBEMTlGNkRGODEwMDk4RjVFQyAvKiBJbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNUZEMDA2NzE4OUFGRTlDMDA2MzMyMzEgLyog
U2NyaXB0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1RkQwMDY1MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuY3Bw
ICovOyB9OwogCQlBNUZEMDA2ODE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUZEMDA2NjE4
OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NjYsNiArMjg4NiwxNiBAQAogCQlBNUVB
NzBFNjE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVFQTcwRUExOUY1QjNENTAwOThGNUVD
IC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1
RUE3MEVEMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29udGV4dFJlZkluc3BlY3RvclN1
cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRUYxOUY2REU1QTAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3Rp
dmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBNUVBNzBGMDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2Nf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBG
MTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9o
ZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9v
YmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9j
X2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5w
eXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVu
dGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGMzE5RjZERTVB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2Nf
Y29udmVyc2lvbl9oZWxwZXJzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVB
NzBGNDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsg
cGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEY1MTlGNkRFNUEw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHk7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIu
cHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEY3MTlGNkRFNUEwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVz
X2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBG
ODE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVFQTcxMEQxOUY2REY4MTAwOThGNUVDIC8qIEluc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVGRDAwNjUxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlw
dEFyZ3VtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3Jp
cHRBcmd1bWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUZEMDA2NjE4
OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcmlwdEFyZ3VtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTI3Miw2ICs1MzAyLDE2IEBACiAJCQkJQzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKIAkJCQlD
NDcwM0NDNjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgKi8sCiAJCQkJQzQ3MDNDQzcxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQTVFQTcwRUYxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgKi8sCisJCQkJQTVFQTcwRjAxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29i
amVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlB
NUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJh
dGlvbl9oZWFkZXIucHkgKi8sCisJCQkJQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJ
QTVFQTcwRjMxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNp
b25faGVscGVycy5weSAqLywKKwkJCQlBNUVBNzBGNDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywK
KwkJCQlBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVh
ZGVyLnB5ICovLAorCQkJCUE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpl
Y3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkgKi8sCisJCQkJQTVFQTcwRjcxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovLAor
CQkJCUE1RUE3MEY4MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weSAq
LywKIAkJCQlDNDlGRTRBNzE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyLnB5ICovLAogCQkJCUM0OUZFNEE4MTlBQUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0
ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLywKIAkJCQlDNDcwM0NDQTE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLywKQEAgLTUzNDEsMTQgKzUz
ODEsMjQgQEAKIAkJCQlBNTMyNDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmlu
ZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MEUyNzE4N0M5ODFF
MDA4NDNCMTAgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDRDIxOTI4NDRD
QzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwNDE5RjZERTcyMDA5OEY1RUMgLyogZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJQzQ3MDNDRDExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDRDUxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKKwkJ
CQlBNUVBNzEwNTE5RjZERTc0MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmln
dXJhdGlvbl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwNjE5RjZERTc2MDA5
OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlv
bi5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTA3MTlGNkRFNzgwMDk4RjVFQyAvKiBnZW5l
cmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgaW4gSGVhZGVycyAqLywKKwkJ
CQlBNUVBNzEwODE5RjZERTdBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3
MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFk
ZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwQjE5RjZERTgwMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywK
KwkJCQlBNUVBNzEwQzE5RjZERTgyMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkg
aW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwOTE5RjZERTdDMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDRDYxOTI4NDRD
QzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0NGMTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Qw
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NDRTE5Mjg0NENDMDAxM0ZCRUEgLyog
Z2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Q3
MTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEw
MzE5RjZERTZGMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5
MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTJBODM2Mzg2MThE
N0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8sCkBAIC02Mzg2LDggKzY0MzYsMTggQEAKIAkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQlDNDlGRTRBOTE5QUFDODNFMDBGNDBD
RTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGluIFJlc291cmNlcyAqLywK
KwkJCQlBNUVBNzBGOTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJQTVFQTcwRUIx
OUY1QjNENTAwOThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlBNUVBNzEwMjE5RjZERTVBMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUE1RUE3MEZG
MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgaW4gUmVz
b3VyY2VzICovLAorCQkJCUE1RUE3MEZBMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpl
Y3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2Vz
ICovLAorCQkJCUE1RUE3MEZEMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19jb252ZXJzaW9uX2hlbHBlcnMucHkgaW4gUmVzb3VyY2VzICovLAogCQkJCUE1M0YxQUMwMThD
OTBGOEYwMDcyRUI2RCAvKiBmcmFtZXdvcmsuc2IgaW4gUmVzb3VyY2VzICovLAorCQkJCUE1RUE3
MTAxMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1l
bnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQTVFQTcwRkUxOUY2REU1QTAwOThGNUVD
IC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUE1RUE3MEZCMTlGNkRFNUEwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weSBpbiBSZXNvdXJjZXMg
Ki8sCisJCQkJQTVFQTcxMDAxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9j
X2ludGVybmFsX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQTVFQTcwRkMxOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50
YXRpb24ucHkgaW4gUmVzb3VyY2VzICovLAogCQkJCUM0OUZFNEFBMTlBQUM4M0UwMEY0MENFOSAv
KiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9fX2luaXRfXy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL19faW5pdF9fLnB5CmluZGV4IDg4OWUyOWYuLmU5YzY3YjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19f
aW5pdF9fLnB5CkBAIC05LDUgKzksMTQgQEAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyIGltcG9ydCAqCiBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgogZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlciBpbXBvcnQgKgogZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX29i
amVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zy
b20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX29i
amVjdGl2ZV9jX2ludGVybmFsX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmplY3Rp
dmVfY190eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgogZnJvbSBnZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19oZWFkZXIgaW1wb3J0ICoKIGZyb20gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1w
bGVtZW50YXRpb24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
aW5kZXggMGFmNjNkMy4uYTc2YTIwYyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKQEAgLTc1LDcgKzc1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRp
b25zJzogJ1xuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSwKICAgICAgICAgfQogCi0gICAg
ICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBU
ZW1wbGF0ZShUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5I
YW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2Fy
Z3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21h
aW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRv
bWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRs
ZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2Nv
bW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CmluZGV4IGQ4MjE4MzAuLjlhMDhlNjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtODIsNyArODIs
NyBAQCBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgog
ICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9t
YWluczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJk
X2Zvcl9kb21haW4oZG9tYWluLCAnY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yJXNCYWNrZW5kRGlz
cGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ2NsYXNzIEFsdGVybmF0
ZUluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKScpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKQEAgLTEw
NCw3ICsxMDQsNyBAQCBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5l
cmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oY29t
bWFuZF9kZWNsYXJhdGlvbnMpCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gR2VuZXJhdG9y
LndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5k
bGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKHNlbGYsIHBhcmFtZXRlciwgY29tbWFuZCk6CiAgICAgICAgIGVudW1fYXJncyA9IHsKQEAg
LTE5NCw3ICsxOTQsNyBAQCBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4o
ZGVjbGFyYXRpb25zKQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShO
b25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9m
b3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOyIg
JSBjb21tYW5kLmNvbW1hbmRfbmFtZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cmlu
ZGV4IDk3YzdjZmUuLjliZWM1NTcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
QEAgLTc4LDcgKzc4LDcgQEAgY2xhc3MgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9t
YWluX25hbWUKICAgICAgICAgfQogICAgICAgICBkZXN0cnVjdG9yID0gJ0luc3BlY3RvciUoZG9t
YWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yJShkb21haW5OYW1l
KXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVzdHJ1Y3Rvcl9hcmdzCi0gICAg
ICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBk
ZXN0cnVjdG9yKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFp
bihkb21haW4sIGRlc3RydWN0b3IpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgaW1wbGVtZW50
YXRpb25zID0gW10KQEAgLTk4LDcgKzk4LDcgQEAgY2xhc3MgQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIGltcGxlbWVu
dGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3Jf
ZG9tYWluKGNvbW1hbmQsIGRvbWFpbikpCiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQo
Y29tbWFuZCwgZG9tYWluKSkKIAotICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgIlxuXG4iLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5c
bicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9kaXNw
YXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAg
ICAgICAgIGNhc2VzID0gW10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggYWIyMThkYi4uNzNmZjdi
MCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTEwMiw3ICsxMDIsNyBAQCBjbGFzcyBGcm9udGVu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICdldmVu
dERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihldmVudF9kZWNsYXJhdGlvbnMpCiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNo
ZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUo
VGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4sIHVzZWRf
ZW51bV9uYW1lcyk6CiAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDcxZDFjOWQuLjBkNTUxODMgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtNjgsNyArNjgsNyBAQCBjbGFzcyBGcm9udGVu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBm
b3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQo
ZXZlbnQsIGRvbWFpbikpCiAKLSAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2RvbWFpbihkb21haW4sICJcblxuIi5qb2luKGltcGxlbWVudGF0aW9ucykpCisgICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4n
LmpvaW4oaW1wbGVtZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6CiAgICAgICAgIGxp
bmVzID0gW10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTk0ZmMzMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jLnB5CkBAIC0wLDAgKzEsNDg2IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dn
aW5nCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVs
cyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwg
QWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCisKKworZGVmIGpvaW5fdHlwZV9hbmRfbmFtZSh0eXBlX3N0ciwgbmFtZV9zdHIpOgorICAg
IGlmIHR5cGVfc3RyLmVuZHN3aXRoKCcqJyk6CisgICAgICAgIHJldHVybiB0eXBlX3N0ciArIG5h
bWVfc3RyCisgICAgcmV0dXJuIHR5cGVfc3RyICsgJyAnICsgbmFtZV9zdHIKKworCitkZWYgc3Ry
aXBfY29tbWVudF9tYXJrZXJzKHN0cik6CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKCcvKicsICcn
KS5yZXBsYWNlKCcqLycsICcnKQorCisKK2RlZiByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKHN0
ciwgcG9zc2libGVfZHVwbGljYXRlKToKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UocG9zc2libGVf
ZHVwbGljYXRlICsgcG9zc2libGVfZHVwbGljYXRlLCBwb3NzaWJsZV9kdXBsaWNhdGUpCisKKwor
X09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQID0geworICAgICd0aGlzJzogJ3RoaXNPYmplY3Qn
LCAgIyBEZWJ1Z2dlci5DYWxsRnJhbWUudGhpcworICAgICdkZXNjcmlwdGlvbic6ICdzdHJpbmdS
ZXByZXNlbnRhdGlvbicsICAjIFJ1bnRpbWUuUmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uCisgICAg
J2lkJzogJ2lkZW50aWZpZXInLCAgIyBQYWdlLkZyYW1lLmlkLCBSdW50aW1lLkV4ZWN1dGlvbkNv
bnRleHREZXNjcmlwdGlvbi5pZCwgRGVidWdnZXIuQnJlYWtwb2ludEFjdGlvbi5pZAorfQorCitf
T0JKQ19JREVOVElGSUVSX1JFVkVSU0VfUkVOQU1FX01BUCA9IHt9Citmb3Iga2V5LCB2YWx1ZSBp
biBfT0JKQ19JREVOVElGSUVSX1JFTkFNRV9NQVAuaXRlbXMoKToKKyAgICBfT0JKQ19JREVOVElG
SUVSX1JFVkVSU0VfUkVOQU1FX01BUFt2YWx1ZV0gPSBrZXkKKworCitjbGFzcyBPYmpDVHlwZUNh
dGVnb3J5OgorICAgIFNpbXBsZSA9IDAKKyAgICBTdHJpbmcgPSAxCisgICAgT2JqZWN0ID0gMgor
ICAgIEFycmF5ID0gMworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYXRlZ29yeV9vZl90
eXBlKF90eXBlKToKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
KToKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nCisgICAgICAgICAgICBpZiAg
X3R5cGUucmF3X25hbWUoKSA9PSAnb2JqZWN0JyBvciBfdHlwZS5yYXdfbmFtZSgpID09ICdhbnkn
OgorICAgICAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdAorICAgICAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYXJyYXknOgorICAgICAgICAgICAgICAgIHJl
dHVybiBPYmpDVHlwZUNhdGVnb3J5LkFycmF5CisgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVD
YXRlZ29yeS5TaW1wbGUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUp
KToKKyAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdAorICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2Jq
Q1R5cGVDYXRlZ29yeS5BcnJheQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNl
ZFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X29m
X3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
RW51bVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5
X29mX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisgICAgICAgIHJldHVybiBOb25lCisKKwor
Y2xhc3MgT2JqQ0dlbmVyYXRvcjoKKyAgICBPQkpDX1BSRUZJWCA9ICdSV0lQcm90b2NvbCcKKyAg
ICBPQkpDX0pTT05fT0JKRUNUX0JBU0UgPSAnJXNKU09OT2JqZWN0JyAlIE9CSkNfUFJFRklYCisK
KyAgICAjIEFkanVzdCBpZGVudGlmaWVyIG5hbWVzIHRoYXQgY29sbGlkZSB3aXRoIE9iakMga2V5
d29yZHMuCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGlkZW50aWZpZXJfdG9fb2JqY19p
ZGVudGlmaWVyKG5hbWUpOgorICAgICAgICByZXR1cm4gX09CSkNfSURFTlRJRklFUl9SRU5BTUVf
TUFQLmdldChuYW1lLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2lk
ZW50aWZpZXJfdG9faWRlbnRpZmllcihuYW1lKToKKyAgICAgICAgcmV0dXJuIF9PQkpDX0lERU5U
SUZJRVJfUkVWRVJTRV9SRU5BTUVfTUFQLmdldChuYW1lLCBuYW1lKQorCisgICAgIyBHZW5lcmF0
ZSBPYmpDIHR5cGVzLCBjb21tYW5kIGhhbmRsZXJzLCBhbmQgZXZlbnQgZGlzcGF0Y2hlcnMgZm9y
IGEgc3Vic2V0IG9mIGRvbWFpbnMuCisKKyAgICBET01BSU5TX09OX1RPUF9PRl9KQVZBU0NSSVBU
X0RPTUFJTlMgPSBbJ0NTUycsICdET00nLCAnRE9NU3RvcmFnZScsICdOZXR3b3JrJywgJ1BhZ2Un
XQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5
cGVzX2ZpbHRlcihtb2RlbCk6CisgICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5
cGVzKGRvbWFpbik6CisgICAgICAgICAgICBpZiBtb2RlbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jr
cy5UZXN0OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICB3aGl0ZWxp
c3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5TX09OX1RPUF9PRl9KQVZBU0NSSVBUX0RPTUFJ
TlMpCisgICAgICAgICAgICB3aGl0ZWxpc3QudXBkYXRlKHNldChbJ0NvbnNvbGUnLCAnRGVidWdn
ZXInLCAnUnVudGltZSddKSkKKyAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUg
aW4gd2hpdGVsaXN0CisgICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVz
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29t
bWFuZF9oYW5kbGVyX2ZpbHRlcihtb2RlbCk6CisgICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVf
ZG9tYWluX2NvbW1hbmRfaGFuZGxlcihkb21haW4pOgorICAgICAgICAgICAgaWYgbW9kZWwuZnJh
bWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQor
ICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19PTl9UT1Bf
T0ZfSkFWQVNDUklQVF9ET01BSU5TKQorICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5f
bmFtZSBpbiB3aGl0ZWxpc3QKKyAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5f
Y29tbWFuZF9oYW5kbGVyCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF9nZW5l
cmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIobW9kZWwpOgorICAgICAgICBkZWYg
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyKGRvbWFpbik6CisgICAgICAg
ICAgICBpZiBtb2RlbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRv
ci5ET01BSU5TX09OX1RPUF9PRl9KQVZBU0NSSVBUX0RPTUFJTlMpCisgICAgICAgICAgICB3aGl0
ZWxpc3QuYWRkKCdDb25zb2xlJykKKyAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25h
bWUgaW4gd2hpdGVsaXN0CisgICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2
ZW50X2Rpc3BhdGNoZXIKKworICAgICMgT2JqQyBlbnVtIGFuZCB0eXBlIG5hbWVzLgorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX25hbWVfZm9yX3R5cGUodHlwZSk6CisgICAgICAg
IG5hbWUgPSB0eXBlLnF1YWxpZmllZF9uYW1lKCkucmVwbGFjZSgnLicsICcnKQorICAgICAgICBu
YW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCB0eXBlLnR5cGVfZG9tYWluKCku
ZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiAnJXMlcycgJSAoT2JqQ0dlbmVyYXRvci5PQkpD
X1BSRUZJWCwgbmFtZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19lbnVtX25h
bWVfZm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKToKKyAgICAgICAg
ZG9tYWluX25hbWUgPSBkZWNsYXJhdGlvbi50eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUK
KyAgICAgICAgbmFtZSA9ICclcyVzJyAlIChkb21haW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZS5y
YXdfbmFtZSgpKQorICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1l
LCBkb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9C
SkNfUFJFRklYLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2VudW1f
bmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAg
ICAgICBkb21haW5fbmFtZSA9IG1lbWJlci50eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUK
KyAgICAgICAgbmFtZSA9ICclcyVzJXMnICUgKGRvbWFpbl9uYW1lLCBkZWNsYXJhdGlvbi50eXBl
LnJhd19uYW1lKCksIHVjZmlyc3QobWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAgICAgbmFtZSA9
IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIobmFtZSwgZG9tYWluX25hbWUpCisgICAgICAgIHJl
dHVybiAnJXMlcycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3Bh
cmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAg
ICAgZG9tYWluX25hbWUgPSBkb21haW4uZG9tYWluX25hbWUKKyAgICAgICAgbmFtZSA9ICclcyVz
JXMnICUgKGRvbWFpbl9uYW1lLCB1Y2ZpcnN0KGV2ZW50X29yX2NvbW1hbmRfbmFtZSksIHVjZmly
c3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBs
aWNhdGVfZnJvbV9zdHIobmFtZSwgZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiAnJXMlcycg
JSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgb2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShfdHlwZSk6Cisg
ICAgICAgIGRvbWFpbl9uYW1lID0gX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZQorICAg
ICAgICBuYW1lID0gX3R5cGUucXVhbGlmaWVkX25hbWUoKS5yZXBsYWNlKCcuJywgJycpCisgICAg
ICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIGRvbWFpbl9uYW1lKQor
ICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUp
CisKKyAgICAjIFR5cGUgYmFzaWNzLgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpj
X2FjY2Vzc29yX3R5cGVfZm9yX3Jhd19uYW1lKHJhd19uYW1lKToKKyAgICAgICAgaWYgcmF3X25h
bWUgPT0gJ3N0cmluZycgb3IgcmF3X25hbWUgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVy
biAnY29weScKKyAgICAgICAgaWYgcmF3X25hbWUgPT0gJ2ludGVnZXInIG9yIHJhd19uYW1lID09
ICdudW1iZXInIG9yIHJhd19uYW1lID09ICdib29sZWFuJzoKKyAgICAgICAgICAgIHJldHVybiAn
YXNzaWduJworICAgICAgICBpZiByYXdfbmFtZSA9PSAnYW55JyBvciByYXdfbmFtZSA9PSAnb2Jq
ZWN0JzoKKyAgICAgICAgICAgIHJldHVybiAncmV0YWluJworICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3R5cGVfZm9yX3Jhd19uYW1lKHJhd19u
YW1lKToKKyAgICAgICAgaWYgcmF3X25hbWUgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1
cm4gJ05TU3RyaW5nIConCisgICAgICAgIGlmIHJhd19uYW1lID09ICdhcnJheSc6CisgICAgICAg
ICAgICByZXR1cm4gJ05TQXJyYXkgKicKKyAgICAgICAgaWYgcmF3X25hbWUgPT0gJ2ludGVnZXIn
OgorICAgICAgICAgICAgcmV0dXJuICdOU0ludGVnZXInCisgICAgICAgIGlmIHJhd19uYW1lID09
ICdudW1iZXInOgorICAgICAgICAgICAgcmV0dXJuICdkb3VibGUnCisgICAgICAgIGlmIHJhd19u
YW1lID09ICdib29sZWFuJzoKKyAgICAgICAgICAgIHJldHVybiAnQk9PTCcKKyAgICAgICAgaWYg
cmF3X25hbWUgPT0gJ2FueScgb3IgcmF3X25hbWUgPT0gJ29iamVjdCc6CisgICAgICAgICAgICBy
ZXR1cm4gJyVzIConICUgT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JBU0UKKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19jbGFzc19m
b3JfcmF3X25hbWUocmF3X25hbWUpOgorICAgICAgICBpZiByYXdfbmFtZSA9PSAnc3RyaW5nJzoK
KyAgICAgICAgICAgIHJldHVybiAnTlNTdHJpbmcnCisgICAgICAgIGlmIHJhd19uYW1lID09ICdh
cnJheSc6CisgICAgICAgICAgICByZXR1cm4gJ05TQXJyYXknCisgICAgICAgIGlmIHJhd19uYW1l
ID09ICdpbnRlZ2VyJyBvciByYXdfbmFtZSA9PSAnbnVtYmVyJyBvciByYXdfbmFtZSA9PSAnYm9v
bGVhbic6CisgICAgICAgICAgICByZXR1cm4gJ05TTnVtYmVyJworICAgICAgICBpZiByYXdfbmFt
ZSA9PSAnYW55JyBvciByYXdfbmFtZSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIHJldHVybiBP
YmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRQorICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm90b2NvbF90eXBlX2Zvcl9yYXdfbmFtZShy
YXdfbmFtZSk6CisgICAgICAgIGlmIHJhd19uYW1lID09ICdzdHJpbmcnOgorICAgICAgICAgICAg
cmV0dXJuICdTdHJpbmcnCisgICAgICAgIGlmIHJhd19uYW1lID09ICdpbnRlZ2VyJzoKKyAgICAg
ICAgICAgIHJldHVybiAnaW50JworICAgICAgICBpZiByYXdfbmFtZSA9PSAnbnVtYmVyJzoKKyAg
ICAgICAgICAgIHJldHVybiAnZG91YmxlJworICAgICAgICBpZiByYXdfbmFtZSA9PSAnYm9vbGVh
bic6CisgICAgICAgICAgICByZXR1cm4gJ2Jvb2wnCisgICAgICAgIGlmIHJhd19uYW1lID09ICdh
bnknIG9yIHJhd19uYW1lID09ICdvYmplY3QnOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0
b3JPYmplY3QnCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiAoaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0
b3IucHJvdG9jb2xfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAg
aWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2Jq
Q0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQor
ICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWlu
KCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIChpc2luc3RhbmNl
KF90eXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dlbmVyYXRv
ci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAg
IHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8JXM+JyAlIHN1Yl90eXBlCisgICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgcmV0
dXJuIE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5
cGUpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9i
amNfY2xhc3NfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
UHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19j
bGFzc19mb3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5v
YmpjX2NsYXNzX2Zvcl9yYXdfbmFtZShfdHlwZS5wcmltaXRpdmVfdHlwZS5yYXdfbmFtZSgpKQor
ICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKF90eXBlKQorICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICBzdWJfdHlwZSA9
IHN0cmlwX2NvbW1lbnRfbWFya2VycyhPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUo
X3R5cGUuZWxlbWVudF90eXBlKSkKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheS8qPCVzPiov
JyAlIHN1Yl90eXBlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkp
OgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShf
dHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIG9iamNfYWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyKG1lbWJlcik6CisgICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfYWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyX2lu
dGVybmFsKG1lbWJlci50eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2Fj
Y2Vzc29yX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChfdHlwZSk6CisgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dl
bmVyYXRvci5vYmpjX2FjY2Vzc29yX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkp
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuICdhc3NpZ24nCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBl
KSk6CisgICAgICAgICAgICByZXR1cm4gJ3JldGFpbicKKyAgICAgICAgaWYgKGlzaW5zdGFuY2Uo
X3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdjb3B5JworICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBP
YmpDR2VuZXJhdG9yLm9iamNfYWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBl
LmFsaWFzZWRfdHlwZSkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgb2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKG1l
bWJlci50eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBvYmpjX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChfdHlwZSwgZGVjbGFyYXRpb24sIG1l
bWJlcik6CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Cisg
ICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3Jhd19uYW1lKF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkp
OgorICAgICAgICAgICAgaWYgKF90eXBlLmlzX2Fub255bW91cyk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21l
bWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0
b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShfdHlwZSkKKyAgICAgICAg
aWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBP
YmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkgKyAnIConCisgICAgICAgIGlm
IChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHN1Yl90eXBlID0g
c3RyaXBfY29tbWVudF9tYXJrZXJzKE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShf
dHlwZS5lbGVtZW50X3R5cGUpKQorICAgICAgICAgICAgcmV0dXJuICdOU0FycmF5Lyo8JXM+Ki8g
KicgJSBzdWJfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
KToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVy
X2ludGVybmFsKF90eXBlLmFsaWFzZWRfdHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY190eXBlX2Zv
cl9wYXJhbShkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyLCByZXNwZWN0
X29wdGlvbmFsPVRydWUpOgorICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNf
dHlwZV9mb3JfcGFyYW1faW50ZXJuYWwocGFyYW1ldGVyLnR5cGUsIGRvbWFpbiwgZXZlbnRfb3Jf
Y29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCisgICAgICAgIGlmIHJlc3BlY3Rfb3B0aW9uYWwgYW5k
IHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgIGlmIG9iamNfdHlwZS5lbmRzd2l0
aCgnKicpOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmpjX3R5cGUgKyAnKicKKyAgICAgICAg
ICAgIHJldHVybiBvYmpjX3R5cGUgKyAnIConCisgICAgICAgIHJldHVybiBvYmpjX3R5cGUKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbChf
dHlwZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6CisgICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByZXR1
cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkp
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAg
aWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJh
dG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBl
dmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKKyAgICAgICAgICAgIHJldHVybiBPYmpD
R2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0oX3R5cGUpCisg
ICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICBy
ZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpICsgJyAqJworICAg
ICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICBzdWJf
dHlwZSA9IHN0cmlwX2NvbW1lbnRfbWFya2VycyhPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9y
X3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKSkKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheS8q
PCVzPiovIConICUgc3ViX3R5cGUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9y
X3BhcmFtX2ludGVybmFsKF90eXBlLmFsaWFzZWRfdHlwZSwgZG9tYWluLCBldmVudF9vcl9jb21t
YW5kX25hbWUsIHBhcmFtZXRlcikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgT2JqQyA8
LT4gUHJvdG9jb2wgY29udmVyc2lvbiBmb3IgY29tbWFuZHMgYW5kIGV2ZW50cy4KKyAgICAjICAg
LSBjb252ZXJ0IGEgY29tbWFuZCBjYWxsIHBhcmFtZXRlciByZWNlaXZlZCBmcm9tIFByb3RvY29s
IHRvIE9iakMgZm9yIGhhbmRsZXIKKyAgICAjICAgLSBjb252ZXJ0IGEgY29tbWFuZCByZXR1cm4g
cGFyYW1ldGVyIGluIGNhbGxiYWNrIGJsb2NrIGZyb20gT2JqQyB0byBQcm90b2NvbCB0byBzZW5k
CisgICAgIyAgIC0gY29udmVydCBhbiBldmVudCBwYXJhbWV0ZXIgZnJvbSBPYmpDIEFQSSB0byBQ
cm90b2NvbCB0byBzZW5kCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfcHJvdG9j
b2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHZhcl90eXBlLCB2YXJfbmFtZSk6Cisg
ICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9vZl90eXBlKHZhcl90
eXBlKQorICAgICAgICBpZiBjYXRlZ29yeSA9PSBPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZSBvciBj
YXRlZ29yeSA9PSBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZzoKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodmFyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3RvUHJv
dG9jb2xTdHJpbmcoJXMpJyAlIHZhcl9uYW1lCisgICAgICAgICAgICByZXR1cm4gdmFyX25hbWUK
KyAgICAgICAgaWYgY2F0ZWdvcnkgPT0gT2JqQ1R5cGVDYXRlZ29yeS5PYmplY3Q6CisgICAgICAg
ICAgICByZXR1cm4gJ1slcyB0b0luc3BlY3Rvck9iamVjdF0nICUgdmFyX25hbWUKKyAgICAgICAg
aWYgY2F0ZWdvcnkgPT0gT2JqQ1R5cGVDYXRlZ29yeS5BcnJheToKKyAgICAgICAgICAgIHByb3Rv
Y29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUodmFyX3R5cGUu
ZWxlbWVudF90eXBlKQorICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2Jq
Y19jbGFzc19mb3JfdHlwZSh2YXJfdHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICBpZiBw
cm90b2NvbF90eXBlID09ICdJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvclN0cmluZ0FycmF5QXJyYXkoJXMpJyAlIHZh
cl9uYW1lCisgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlID09ICdTdHJpbmcnIGFuZCBvYmpj
X2NsYXNzID09ICdOU1N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JT
dHJpbmdBcnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUg
PT0gJ2ludCcgYW5kIG9iamNfY2xhc3MgPT0gJ05TTnVtYmVyJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2luc3BlY3RvckludGVnZXJBcnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAg
IGlmIHByb3RvY29sX3R5cGUgPT0gJ2RvdWJsZScgYW5kIG9iamNfY2xhc3MgPT0gJ05TTnVtYmVy
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvckRvdWJsZUFycmF5KCVzKScgJSB2
YXJfbmFtZQorICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSglcyknICUg
dmFyX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19wcm90b2NvbF9pbXBv
cnRfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAg
ICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBp
ZiBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdmcm9t
UHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9m
b3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpLCBuYW1lKQorICAg
ICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVy
YXRvci5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKG1lbWJlci50eXBlKSwg
bmFtZSkKKyAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9pbXBvcnRf
ZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUobWVtYmVyLnR5cGUsIG5hbWUpCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIG9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFt
ZXRlcihuYW1lLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIHJldHVy
biAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVt
X25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyKSwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3Rv
Y29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25v
bl9hbm9ueW1vdXNfZW51bShwYXJhbWV0ZXIudHlwZSksIG5hbWUpCisgICAgICAgIHJldHVybiBP
YmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxl
KHBhcmFtZXRlci50eXBlLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpj
X3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZSh2YXJfdHlwZSwgdmFyX25h
bWUpOgorICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfb2ZfdHlw
ZSh2YXJfdHlwZSkKKyAgICAgICAgaWYgY2F0ZWdvcnkgPT0gT2JqQ1R5cGVDYXRlZ29yeS5TaW1w
bGUgb3IgY2F0ZWdvcnkgPT0gT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmc6CisgICAgICAgICAgICBy
ZXR1cm4gdmFyX25hbWUKKyAgICAgICAgaWYgY2F0ZWdvcnkgPT0gT2JqQ1R5cGVDYXRlZ29yeS5P
YmplY3Q6CisgICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNz
X2Zvcl90eXBlKHZhcl90eXBlKQorICAgICAgICAgICAgcmV0dXJuICdbW1slcyBhbGxvY10gaW5p
dFdpdGhJbnNwZWN0b3JPYmplY3Q6JXNdIGF1dG9yZWxlYXNlXScgJSAob2JqY19jbGFzcywgdmFy
X25hbWUpCisgICAgICAgIGlmIGNhdGVnb3J5ID09IE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6Cisg
ICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBl
KHZhcl90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgPT0gJ05T
U3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNTdHJpbmdBcnJheSglcyknICUg
dmFyX25hbWUKKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgPT0gJ05TTnVtYmVyJzogICMgRklY
TUU6IEludGVnZXIgb3IgRG91YmxlPworICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY0ludGVn
ZXJBcnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnb2JqY0FycmF5PCVz
PiglcyknICUgKG9iamNfY2xhc3MsIHZhcl9uYW1lKQorCisgICAgIyBPYmpDIDwtPiBKU09OIG9i
amVjdCBjb252ZXJzaW9uIGZvciB0eXBlcyBnZXR0ZXJzL3NldHRlcnMuCisgICAgIyAgIC0gY29u
dmVydCBhIG1lbWJlciBzZXR0ZXIgZnJvbSBPYmpDIEFQSSB0byBKU09OIG9iamVjdCBzZXR0ZXIK
KyAgICAjICAgLSBjb252ZXJ0IGEgbWVtYmVyIGdldHRlciBmcm9tIEpTT04gb2JqZWN0IHRvIE9i
akMgQVBJCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfdG9fcHJvdG9jb2xfZXhw
cmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIsIHN1Yl9leHByZXNzaW9uKToK
KyAgICAgICAgY2F0ZWdvcnkgPSBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X29mX3R5cGUobWVt
YmVyLnR5cGUpCisgICAgICAgIGlmIGNhdGVnb3J5ID09IE9iakNUeXBlQ2F0ZWdvcnkuU2ltcGxl
IG9yIGNhdGVnb3J5ID09IE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nOgorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHJldHVy
biAndG9Qcm90b2NvbFN0cmluZyglcyknICUgc3ViX2V4cHJlc3Npb24KKyAgICAgICAgICAgIHJl
dHVybiBzdWJfZXhwcmVzc2lvbgorICAgICAgICBpZiBjYXRlZ29yeSA9PSBPYmpDVHlwZUNhdGVn
b3J5Lk9iamVjdDoKKyAgICAgICAgICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgorICAgICAgICBp
ZiBjYXRlZ29yeSA9PSBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgorICAgICAgICAgICAgb2JqY19j
bGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShtZW1iZXIudHlwZS5lbGVt
ZW50X3R5cGUpCisgICAgICAgICAgICBpZiBvYmpjX2NsYXNzID09ICdOU1N0cmluZyc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJpbmdBcnJheSglcyknICUgc3ViX2V4cHJl
c3Npb24KKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgPT0gJ05TTnVtYmVyJzoKKyAgICAgICAg
ICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90
eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgICAgICBpZiBwcm90b2Nv
bF90eXBlID09ICdkb3VibGUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3Rv
ckRvdWJsZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIHJldHVy
biAnaW5zcGVjdG9ySW50ZWdlckFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAg
ICAgcmV0dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvdG9jb2xfdG9fb2JqY19leHByZXNzaW9uX2Zv
cl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciwgc3ViX2V4cHJlc3Npb24pOgorICAgICAgICBj
YXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfb2ZfdHlwZShtZW1iZXIudHlwZSkK
KyAgICAgICAgaWYgY2F0ZWdvcnkgPT0gT2JqQ1R5cGVDYXRlZ29yeS5TaW1wbGUgb3IgY2F0ZWdv
cnkgPT0gT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmc6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KG1lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLnR5cGUu
aXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0
cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1v
dXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciksIHN1Yl9leHByZXNzaW9uKQorICAg
ICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNH
ZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShtZW1iZXIudHlw
ZSksIHN1Yl9leHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuIHN1Yl9leHByZXNzaW9uCisg
ICAgICAgIGlmIGNhdGVnb3J5ID09IE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgorICAgICAgICAg
ICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJh
dGlvbiwgbWVtYmVyKQorICAgICAgICAgICAgcmV0dXJuICcoJXMpJXMnICUgKG9iamNfdHlwZSwg
c3ViX2V4cHJlc3Npb24pCisgICAgICAgIGlmIGNhdGVnb3J5ID09IE9iakNUeXBlQ2F0ZWdvcnku
QXJyYXk6CisgICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgIG9i
amNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUobWVtYmVyLnR5cGUu
ZWxlbWVudF90eXBlKQorICAgICAgICAgICAgaWYgb2JqY19jbGFzcyA9PSAnTlNTdHJpbmcnOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY1N0cmluZ0FycmF5KCVzKScgJSBzdWJfZXhwcmVz
c2lvbgorICAgICAgICAgICAgaWYgb2JqY19jbGFzcyA9PSAnTlNOdW1iZXInOgorICAgICAgICAg
ICAgICAgIHByb3RvY29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5
cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgICAgIGlmIHByb3RvY29s
X3R5cGUgPT0gJ2RvdWJsZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY0RvdWJs
ZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIHJldHVybiAnb2Jq
Y0ludGVnZXJBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KKyAgICAgICAgICAgIHJldHVybiAn
b2JqY0FycmF5PCVzPiglcyknICUgKG9iamNfY2xhc3MsIHN1Yl9leHByZXNzaW9uKQorCisgICAg
IyBKU09OIG9iamVjdCBzZXR0ZXIvZ2V0dGVyIHNlbGVjdG9ycyBmb3IgdHlwZXMuCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfc2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xh
cmF0aW9uLCBtZW1iZXIpOgorICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRl
cl9tZXRob2RfZm9yX21lbWJlcl9pbnRlcm5hbChtZW1iZXIudHlwZSwgZGVjbGFyYXRpb24sIG1l
bWJlcikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19zZXR0ZXJfbWV0aG9kX2Zv
cl9tZW1iZXJfaW50ZXJuYWwoX3R5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgcmF3X25h
bWUgPSBfdHlwZS5yYXdfbmFtZSgpCisgICAgICAgICAgICBpZiByYXdfbmFtZSA9PSAnYm9vbGVh
bic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRCb29sJworICAgICAgICAgICAgaWYgcmF3
X25hbWUgPT0gJ2ludGVnZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0SW50ZWdlcicK
KyAgICAgICAgICAgIGlmIHJhd19uYW1lID09ICdudW1iZXInOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnc2V0RG91YmxlJworICAgICAgICAgICAgaWYgcmF3X25hbWUgPT0gJ3N0cmluZyc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICdzZXRTdHJpbmcnCisgICAgICAgICAgICBpZiByYXdfbmFt
ZSA9PSAnYW55JyBvciByYXdfbmFtZSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ3NldE9iamVjdCcKKyAgICAgICAgICAgIGlmIHJhd19uYW1lID09ICdhcnJheSc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdzZXRJbnNwZWN0b3JBcnJheScKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAg
ICAgICAgcmV0dXJuICdzZXRTdHJpbmcnCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcKKyAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdzZXRJ
bnNwZWN0b3JBcnJheScKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2Rf
Zm9yX21lbWJlcl9pbnRlcm5hbChfdHlwZS5hbGlhc2VkX3R5cGUsIGRlY2xhcmF0aW9uLCBtZW1i
ZXIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9i
amNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAg
ICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2dldHRlcl9tZXRob2RfZm9yX21lbWJlcl9pbnRl
cm5hbChtZW1iZXIudHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcikKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgb2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwoX3R5cGUs
IGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJp
bWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgcmF3X25hbWUgPSBfdHlwZS5yYXdfbmFtZSgpCisg
ICAgICAgICAgICBpZiByYXdfbmFtZSA9PSAnYm9vbGVhbic6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdib29sRm9yS2V5JworICAgICAgICAgICAgaWYgcmF3X25hbWUgPT0gJ2ludGVnZXInOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnaW50ZWdlckZvcktleScKKyAgICAgICAgICAgIGlmIHJh
d19uYW1lID09ICdudW1iZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnZG91YmxlRm9yS2V5
JworICAgICAgICAgICAgaWYgcmF3X25hbWUgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICAgICAg
cmV0dXJuICdzdHJpbmdGb3JLZXknCisgICAgICAgICAgICBpZiByYXdfbmFtZSA9PSAnYW55JyBv
ciByYXdfbmFtZSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamVjdEZv
cktleScKKyAgICAgICAgICAgIGlmIHJhd19uYW1lID09ICdhcnJheSc6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdpbnNwZWN0b3JBcnJheUZvcktleScKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuICdzdHJpbmdGb3JLZXknCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmpl
Y3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ29iamVjdEZvcktleScKKyAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdpbnNw
ZWN0b3JBcnJheUZvcktleScKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRU
eXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2dldHRlcl9tZXRo
b2RfZm9yX21lbWJlcl9pbnRlcm5hbChfdHlwZS5hbGlhc2VkX3R5cGUsIGRlY2xhcmF0aW9uLCBt
ZW1iZXIpCisgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKc2ltaWxhcml0eSBpbmRleCA2MSUKY29weSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmNvcHkgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCAwYWY2M2QzLi44YmJkMGZmIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5h
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zMCw1NCArMzAsNzEgQEAgaW1wb3J0IHN0cmluZwog
aW1wb3J0IHJlCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAorZnJvbSBnZW5lcmF0ZV9v
YmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvcgogZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcwogCiBsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorY2xhc3MgT2JqZWN0aXZlQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CiAgICAgICAgIEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgotICAgICAgICByZXR1cm4gJ0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oJworICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLmgnICUgT2JqQ0dl
bmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6
CisgICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9t
YWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgog
ICAgICAgICBoZWFkZXJzID0gWwotICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbFR5cGVz
LmgiJywKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4nLAorICAgICAgICAgICAgJzx3dGYvUmV0YWluUHRyLmg+
JywKICAgICAgICAgXQogCiAgICAgICAgIGhlYWRlcl9hcmdzID0gewogICAgICAgICAgICAgJ2hl
YWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1l
KCkpLAogICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhl
YWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICdmb3J3YXJkRGVjbGFy
YXRpb25zJzogc2VsZi5fZ2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0aW9ucygpLAogICAg
ICAgICB9CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCiAg
ICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
LkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9u
ZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRv
bWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQWx0
ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpD
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX29iamNf
aGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVy
UG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVy
biAnXG5cbicuam9pbihzZWN0aW9ucykKIAotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgIGRlZiBfZ2VuZXJhdGVfb2Jq
Y19mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbJ0Bwcm90b2Nv
bCAlcyVzRG9tYWluSGFuZGxlcjsnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFp
bi5kb21haW5fbmFtZSkgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKV0K
KyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfb2Jq
Y19mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ0BjbGFzcyAlcyVzRG9tYWluSGFuZGxlcjsnICUgKE9iakNHZW5lcmF0
b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlv
bnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1h
bmRzOgogICAgICAgICAgICAgcmV0dXJuICcnCiAKICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlv
bnMgPSBbXQogICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAg
ICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9k
ZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkKKyAgICAgICAgICAgIGNvbW1hbmRfZGVj
bGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25f
Zm9yX2NvbW1hbmQoY29tbWFuZCkpCiAKICAgICAgICAgaGFuZGxlcl9hcmdzID0gewogICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCiAgICAgICAgICAgICAnY29t
bWFuZERlY2xhcmF0aW9ucyc6ICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucyksCisgICAg
ICAgICAgICAnb2JqY1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCiAgICAgICAg
IH0KIAotICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVh
ZGVyRG9tYWluSGFuZGxlck9iakNEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRs
ZXJfYXJncykpCiAKLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2Nv
bW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10K
ICAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQnXQogICAgICAgICBmb3IgX3BhcmFt
ZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKQEAgLTg3LDUgKzEwNCw1IEBAIGNsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKICAgICAgICAg
ICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAogICAgICAgICB9Ci0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJh
bWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSBvdmVycmlkZTsn
ICUgY29tbWFuZF9hcmdzKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0Y2QzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCAr
MSwxNjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0
cmluZworaW1wb3J0IHJlCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5l
cmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvciwg
am9pbl90eXBlX2FuZF9uYW1lCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9t
IGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0
ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIE9iamVjdGl2ZUNDb25maWd1cmF0aW9uSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAg
ICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpD
X1BSRUZJWAorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJl
dHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRf
aGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNv
bmRhcnlfaGVhZGVycyA9IFsKKyAgICAgICAgICAgICciJXNJbnRlcm5hbC5oIicgJSBPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJyIlc0VudW1Db252ZXJzaW9uSGVscGVy
cy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJzxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICBdCisKKyAgICAgICAgaGVh
ZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzQmFja2VuZERp
c3BhdGNoZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAn
c2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9y
IGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAgZG9t
YWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10K
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
KyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxl
bWVudGF0aW9uX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUG9z
dGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAn
XG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBkb21haW4u
Y29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBjb21tYW5kX2RlY2xh
cmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAg
ICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5k
bGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCkpCisKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNv
bW1hbmQpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcg
Y2FsbElkJ10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoR2VuZXJhdG9y
LnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIp
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsK
KyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAncGFy
YW1ldGVycyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdzdWNjZXNzQ2Fs
bGJhY2snOiBzZWxmLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kKGRvbWFpbiwg
Y29tbWFuZCksCisgICAgICAgICAgICAnY29udmVyc2lvbnMnOiBzZWxmLl9nZW5lcmF0ZV9jb252
ZXJzaW9uc19mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAorICAgICAgICAgICAgJ2ludm9j
YXRpb24nOiBzZWxmLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29t
bWFuZCksCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJEb21haW5IYW5kbGVySW1wbGVtZW50YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipj
b21tYW5kX2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21t
YW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CisgICAgICAgIGxpbmVzID0gW10KKworICAgICAg
ICAjIEZJWE1FOiBUaHJvdyBleGNlcHRpb24gZm9yIG5pbCByZXF1aXJlZCByZXR1cm4gcGFyYW1l
dGVycy4KKworICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBvYmpjX3R5
cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNv
bW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dl
bmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpCisgICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChq
b2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKCVzKSB7JyAlICcsICcuam9pbihz
dWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsnKQorCisgICAgICAgIGlmIGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVy
bl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBHZW5lcmF0
b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSkKKyAgICAgICAgICAg
ICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZp
ZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIHZhcl9leHByZXNz
aW9uID0gJyolcycgJSB2YXJfbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSB2YXJf
bmFtZQorICAgICAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5v
YmpjX3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlw
ZSwgdmFyX2V4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJlc3Vs
dE9iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
aWYgKCVzKScgJSB2YXJfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgICAgICByZXN1bHRPYmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAo
a2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVz
c2lvbikpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5n
KCkpOycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSwgU3RyaW5nKCkpOycpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsn
KQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9j
b252ZXJzaW9uc19mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBs
aW5lcyA9IFtdCisgICAgICAgIGlmIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5j
YWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9uYW1lID0g
J29fJXMnICUgaW5fcGFyYW1fbmFtZQorICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVy
YXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBh
cmFtZXRlciwgRmFsc2UpCisgICAgICAgICAgICBpbl9wYXJhbV9vcHRpb25hbF9zYWZlX25hbWUg
PSAnKiVzJyAlIGluX3BhcmFtX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgaW5f
cGFyYW1fbmFtZQorICAgICAgICAgICAgaW1wb3J0X2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9y
Lm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcihpbl9wYXJhbV9v
cHRpb25hbF9zYWZlX25hbWUsIGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRl
cikKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMgPSAlczsnICUgKGpvaW5fdHlwZV9hbmRfbmFtZShv
YmpjX3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSksIGltcG9ydF9leHByZXNzaW9uKSkKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpv
aW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCisgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9w
YXJhbV9uYW1lLCBpbXBvcnRfZXhwcmVzc2lvbikpCisKKyAgICAgICAgaWYgbGluZXM6CisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWlu
LCBjb21tYW5kKToKKyAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICBwYWlycy5hcHBlbmQoJ1dp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2snKQorICAgICAgICBwYWlycy5hcHBlbmQoJ3N1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2snKQorICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdp
bl8lcycgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIG9iamNfaW5fcGFy
YW1fbmFtZSA9ICdvXyVzJyAlIGluX3BhcmFtX25hbWUKKyAgICAgICAgICAgIGlmIG5vdCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycg
JSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvYmpjX2luX3BhcmFtX25hbWUpKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcHRpb25hbF9leHByZXNzaW9uID0gJyglcyA/
ICYlcyA6IG5pbCknICUgKGluX3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fbmFtZSkKKyAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUsIG9wdGlvbmFsX2V4cHJlc3Npb24pKQorICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0
ZSAlcyVzXTsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CnNpbWlsYXJpdHkgaW5kZXggNTElCmNvcHkgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpjb3B5IHRvIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CmluZGV4IDBhZjYzZDMuLjY4ODkwNDAgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVj
dGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CkBAIC0yNyw2NSArMjcsNjggQEAKIAogaW1w
b3J0IGxvZ2dpbmcKIGltcG9ydCBzdHJpbmcKLWltcG9ydCByZQogZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCiAKK2Zyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0
b3IKIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKIGZyb20gZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorY2xhc3MgT2JqZWN0aXZlQ0NvbmZpZ3Vy
YXRpb25IZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKICAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6
Ci0gICAgICAgIHJldHVybiAnSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgn
CisgICAgICAgIHJldHVybiAnJXNDb25maWd1cmF0aW9uLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpD
X1BSRUZJWAogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgaGVhZGVy
cyA9IFsKLSAgICAgICAgICAgICciSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIicsCi0gICAgICAg
ICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+JywKKyAg
ICAgICAgICAgICciJXMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKICAgICAgICAg
XQogCiAgICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3Ry
aW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAotICAgICAg
ICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVh
ZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNp
bXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKICAgICAgICAgfQogCisg
ICAgICAgIHNlbGYuX2NvbW1hbmRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKQorICAgICAgICBz
ZWxmLl9ldmVudF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5f
ZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKQorCiAgICAgICAgIGRvbWFpbnMg
PSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRl
clByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5k
bGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUG9z
dGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFkZXJQcmVsdWRlKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbnRlcmZhY2VfZm9yX2RvbWFpbnMoZG9tYWlucykp
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNI
ZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAg
cmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlmIG5vdCBk
b21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAgICBjb21tYW5k
X2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5k
czoKLSAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpKQotCi0gICAgICAgIGhh
bmRsZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLAotICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFu
ZF9kZWNsYXJhdGlvbnMpLAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJh
dGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCi0KLSAgICBkZWYgX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAg
ZGVmIF9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ludGVyZmFjZV9mb3JfZG9tYWlucyhzZWxmLCBk
b21haW5zKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25n
IGNhbGxJZCddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzIGluXyVzJyAlIChHZW5lcmF0
b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0
ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLQotICAgICAgICBjb21tYW5kX2FyZ3Mg
PSB7Ci0gICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKLSAg
ICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAotICAgICAgICB9
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMo
JShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ0BpbnRlcmZhY2UgUldJUHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QnKQorICAg
ICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBsaW5lcy5leHRlbmQoc2Vs
Zi5fZ2VuZXJhdGVfcHJvcGVydGllc19mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnQGVuZCcpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBk
ZWYgX2dlbmVyYXRlX3Byb3BlcnRpZXNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAg
ICBwcm9wZXJ0eV9hcmdzID0geworICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJh
dG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCisgICAgICAgICAgICAndmFyaWFibGVOYW1lUHJlZml4Jzogc2VsZi5fdmFyaWFibGVO
YW1lUHJlZml4Rm9yRG9tYWluKGRvbWFpbiksCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9
IFtdCisgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIo
ZG9tYWluKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2Jq
Q0NvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHkpLnN1YnN0aXR1dGUoTm9uZSwgKipwcm9wZXJ0
eV9hcmdzKSkKKyAgICAgICAgaWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVy
KGRvbWFpbik6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9i
akNDb25maWd1cmF0aW9uRXZlbnRQcm9wZXJ0eSkuc3Vic3RpdHV0ZShOb25lLCAqKnByb3BlcnR5
X2FyZ3MpKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBfdmFyaWFibGVOYW1lUHJl
Zml4Rm9yRG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGRvbWFpbl9uYW1lID0gZG9tYWlu
LmRvbWFpbl9uYW1lCisgICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0RPTScpOgor
ICAgICAgICAgICAgcmV0dXJuICdkb20nICsgZG9tYWluX25hbWVbMzpdCisgICAgICAgIGlmIGRv
bWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0NTUycpOgorICAgICAgICAgICAgcmV0dXJuICdjc3MnICsg
ZG9tYWluX25hbWVbMzpdCisgICAgICAgIHJldHVybiBkb21haW5fbmFtZVs6MV0ubG93ZXIoKSAr
IGRvbWFpbl9uYW1lWzE6XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9p
bXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRp
b24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzQ2YzQ5YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkK
QEAgLTAsMCArMSwxNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQg
KGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJh
dGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yIGltcG9y
dCBHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykK
KworCitjbGFzcyBPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICclc0NvbmZpZ3VyYXRpb24ubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAg
ZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBb
CisgICAgICAgICAgICAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJ
WCwKKyAgICAgICAgICAgICciJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgT2JqQ0dlbmVyYXRv
ci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4nLAorICAgICAgICAgICAg
JzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4nLAorICAgICAg
ICBdCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1
ZGUnOiAnIiVzQ29uZmlndXJhdGlvbi5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAor
ICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAlcycg
JSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAgICAgICB9CisK
KyAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5l
cmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisgICAgICAg
IHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisKKyAgICAgICAgZG9tYWlu
cyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNJbXBsZW1lbnRhdGlvblByZWx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21h
aW5zKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
Lk9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMoc2VsZiwgZG9t
YWlucyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW1wbGVt
ZW50YXRpb24gUldJUHJvdG9jb2xDb25maWd1cmF0aW9uJykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsnKQorICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJh
dGVfaXZhcnMoZG9tYWlucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXInKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICgh
c2VsZiknKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG5pbDsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoY29udHJvbGxlcik7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIHJldHVybiBzZWxmOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVy
YXRlX2RlYWxsb2MoZG9tYWlucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAg
Zm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIGFu
ZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWluKGRvbWFpbikpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgaWYgZG9tYWluLmV2
ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfZ2V0dGVyX2Zvcl9kb21h
aW4oZG9tYWluKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX2l2YXJzKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBsaW5lcyA9IFtd
CisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGlmIGRvbWFpbi5j
b21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgICAg
ICBvYmpjX2NsYXNzX25hbWUgPSAnJXMlc0RvbWFpbkhhbmRsZXInICUgKE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBpdmFyX25h
bWUgPSAnXyVzSGFuZGxlcicgJSBzZWxmLl92YXJpYWJsZU5hbWVQcmVmaXhGb3JEb21haW4oZG9t
YWluKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkPCVzPiAlczsnICUgKG9i
amNfY2xhc3NfbmFtZSwgaXZhcl9uYW1lKSkKKyAgICAgICAgICAgIGlmIGRvbWFpbi5ldmVudHMg
YW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAgICAgIG9iamNfY2xh
c3NfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9C
SkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAgICAgICAgaXZhcl9uYW1l
ID0gJ18lc0V2ZW50RGlzcGF0Y2hlcicgJSBzZWxmLl92YXJpYWJsZU5hbWVQcmVmaXhGb3JEb21h
aW4oZG9tYWluKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIColczsnICUg
KG9iamNfY2xhc3NfbmFtZSwgaXZhcl9uYW1lKSkKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAg
ICBkZWYgX2dlbmVyYXRlX2RlYWxsb2Moc2VsZiwgZG9tYWlucyk6CisgICAgICAgIGxpbmVzID0g
W10KKyAgICAgICAgbGluZXMuYXBwZW5kKCctICh2b2lkKWRlYWxsb2MnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ3snKQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAg
ICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgW18lc0hhbmRsZXIgcmVsZWFzZV07JyAl
IHNlbGYuX3ZhcmlhYmxlTmFtZVByZWZpeEZvckRvbWFpbihkb21haW4pKQorICAgICAgICAgICAg
aWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgW18lc0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsn
ICUgc2VsZi5fdmFyaWFibGVOYW1lUHJlZml4Rm9yRG9tYWluKGRvbWFpbikpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFtzdXBlciBkZWFsbG9jXTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J30nKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9z
ZXR0ZXJfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBzZXR0ZXJfYXJncyA9IHsK
KyAgICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J3ZhcmlhYmxlTmFtZVByZWZpeCc6IHNlbGYuX3ZhcmlhYmxlTmFtZVByZWZpeEZvckRvbWFpbihk
b21haW4pLAorICAgICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuT2Jq
Q0NvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHlJbXBsZW1lbnRhdGlvbikuc3Vic3RpdHV0ZShO
b25lLCAqKnNldHRlcl9hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVy
X2dldHRlcl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGdldHRlcl9hcmdzID0g
eworICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAor
ICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAg
ICAndmFyaWFibGVOYW1lUHJlZml4Jzogc2VsZi5fdmFyaWFibGVOYW1lUHJlZml4Rm9yRG9tYWlu
KGRvbWFpbiksCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5P
YmpDQ29uZmlndXJhdGlvbkdldHRlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoq
Z2V0dGVyX2FyZ3MpCisKKyAgICBkZWYgX3ZhcmlhYmxlTmFtZVByZWZpeEZvckRvbWFpbihzZWxm
LCBkb21haW4pOgorICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFpbi5kb21haW5fbmFtZQorICAg
ICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdET00nKToKKyAgICAgICAgICAgIHJldHVy
biAnZG9tJyArIGRvbWFpbl9uYW1lWzM6XQorICAgICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3
aXRoKCdDU1MnKToKKyAgICAgICAgICAgIHJldHVybiAnY3NzJyArIGRvbWFpbl9uYW1lWzM6XQor
ICAgICAgICByZXR1cm4gZG9tYWluX25hbWVbOjFdLmxvd2VyKCkgKyBkb21haW5fbmFtZVsxOl0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbnZlcnNpb25faGVscGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwLi40ZTM2Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9o
ZWxwZXJzLnB5CkBAIC0wLDAgKzEsMTU1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMg
Q29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitm
cm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlw
ZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgYWRkX3doaXRl
c3BhY2Vfc2VwYXJhdG9yKGxpbmVzKToKKyAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcn
OgorICAgICAgICByZXR1cm4KKyAgICBsaW5lcy5hcHBlbmQoJycpCisKKworY2xhc3MgT2JqZWN0
aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVu
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgnICUg
T2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAg
ICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzQXJyYXlDb252ZXJzaW9uSGVscGVycy5o
IicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICBdCisKKyAgICAgICAgaGVh
ZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0
ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCisgICAgICAgIH0KKworICAgICAg
ICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VjdGlvbnMg
PSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0NvbnZlcnNpb25I
ZWxwZXJzUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29udmVyc2lvbkhlbHBlcnNT
dGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChz
ZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zLCBkb21haW5zKSkKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29udmVyc2lvbkhlbHBl
cnNQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0
dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnZl
cnNpb25fZnVuY3Rpb25zKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKworICAg
ICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KKyAgICAgICAgZm9yIGRlY2xhcmF0
aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGFkZF93aGl0
ZXNwYWNlX3NlcGFyYXRvcihsaW5lcykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9t
YWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZv
ciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5p
c19hbm9ueW1vdXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3doaXRlc3BhY2Vfc2Vw
YXJhdG9yKGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX21lbWJlcihkb21haW4sIGRl
Y2xhcmF0aW9uLCBtZW1iZXIpKQorCisgICAgICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51bXMu
CisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAg
aWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5
cGUuaXNfYW5vbnltb3VzKToKKyAgICAgICAgICAgICAgICAgICAgYWRkX3doaXRlc3BhY2Vfc2Vw
YXJhdG9yKGxpbmVzKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29t
bWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICBmb3IgcGFyYW1ldGVy
IGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgKGlzaW5z
dGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5v
bnltb3VzKToKKyAgICAgICAgICAgICAgICAgICAgYWRkX3doaXRlc3BhY2Vfc2VwYXJhdG9yKGxp
bmVzKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21t
YW5kX25hbWUsIHBhcmFtZXRlcikpCisKKyAgICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51bXMu
CisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIChp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlz
X2Fub255bW91cyk6CisgICAgICAgICAgICAgICAgICAgIGFkZF93aGl0ZXNwYWNlX3NlcGFyYXRv
cihsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2
ZW50X25hbWUsIHBhcmFtZXRlcikpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
KworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFy
YXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CisgICAgICAgIG9iamNfZW51bV9uYW1l
ID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFy
YXRpb24oZGVjbGFyYXRpb24pCisgICAgICAgIGVudW1fdmFsdWVzID0gZGVjbGFyYXRpb24udHlw
ZS5lbnVtX3ZhbHVlcygpCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2VudW1fb2JqY190b19wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25h
bWUsIGVudW1fdmFsdWVzKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Vu
dW1fZnJvbV9wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKKyAg
ICAgICAgcmV0dXJuICdcblxuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlv
biwgbWVtYmVyKToKKyAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNf
ZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikK
KyAgICAgICAgZW51bV92YWx1ZXMgPSBtZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpCisgICAgICAg
IGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fb2Jq
Y190b19wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2NvbF9zdHJpbmco
b2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2lu
KGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zv
cl9wYXJhbWV0ZXIoc2VsZiwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRl
cik6CisgICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9u
YW1lLCBwYXJhbWV0ZXIpCisgICAgICAgIGVudW1fdmFsdWVzID0gcGFyYW1ldGVyLnR5cGUuZW51
bV92YWx1ZXMoKQorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBl
bnVtX3ZhbHVlcykpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zy
b21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCisgICAgICAg
IHJldHVybiAnXG5cbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9vYmpj
X3RvX3Byb3RvY29sX3N0cmluZyhzZWxmLCBvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpOgor
ICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKCVzIHZhbHVlKScgJSBvYmpjX2VudW1fbmFtZSkKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc3dpdGNoKHZhbHVlKSB7
JykKKyAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV92YWx1ZXM6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBjYXNlICVzJXM6JyAlIChvYmpjX2VudW1fbmFtZSwgR2VuZXJhdG9y
LnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIiVzIik7JyAlIGVudW1f
dmFsdWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKHNlbGYsIG9iamNfZW51bV9uYW1lLCBlbnVt
X3ZhbHVlcyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1w
bGF0ZTw+JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdpbmxpbmUgJXMgZnJvbVByb3RvY29sU3Ry
aW5nKFN0cmluZyB2YWx1ZSknICUgb2JqY19lbnVtX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgneycpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdmFsdWVzOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKHZhbHVlID09ICIlcyIpJyAlIGVudW1fdmFsdWUpCisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuICVzJXM7JyAlIChvYmpjX2Vu
dW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1
ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsnKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gJXMlczsnICUgKG9iamNfZW51bV9uYW1l
LCBHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlc1swXSkp
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjEzYWYyZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKQEAgLTAsMCArMSwxMzYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20g
Z2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9y
IGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKKworCitjbGFzcyBPYmplY3RpdmVDRnJvbnRlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiAnJXNFdmVudERpc3BhdGNoZXJzLm1tJyAlIE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAg
ICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVu
dF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAg
IHNlY29uZGFyeV9oZWFkZXJzID0gWworICAgICAgICAgICAgJyIlc0VudW1Db252ZXJzaW9uSGVs
cGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJzxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICBdCisKKyAgICAgICAg
aGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzSW50ZXJu
YWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICdzZWNvbmRh
cnlJbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIg
aW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSW1wbGVtZW50YXRpb25QcmVsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQo
bWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zLCBkb21h
aW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSW1w
bGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAg
ICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9l
dmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyhzZWxmLCBkb21haW4pOgorICAgICAgICBp
ZiBub3QgZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXIn
ICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50YXRpb24gJXMnICUgb2JqY19uYW1lKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCct
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXI7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgc2VsZiA9IFtzdXBlciBpbml0XTsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBpZiAoIXNlbGYpJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IHJldHVybiBuaWw7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gc2VsZjsnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGZvciBl
dmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2V2ZW50KGRvbWFpbiwgZXZlbnQpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudChzZWxmLCBkb21haW4sIGV2ZW50KToK
KyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
ZXZlbnRfc2lnbmF0dXJlKGRvbWFpbiwgZXZlbnQpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3sn
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGZy
b250ZW5kQ2hhbm5lbCA9IF9jb250cm9sbGVyLT5mcm9udGVuZENoYW5uZWwoKTsnKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWZyb250ZW5kQ2hhbm5lbCknKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlM
aXRlcmFsKCIlcy4lcyIpKTsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZXZlbnQuZXZlbnRfbmFt
ZSkpCisgICAgICAgIGlmIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBsaW5l
cy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMoZG9tYWluLCBldmVu
dCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRl
ZiBfZ2VuZXJhdGVfZXZlbnRfc2lnbmF0dXJlKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgorICAgICAg
ICBpZiBub3QgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHJldHVybiAnLSAo
dm9pZCklcycgJSBldmVudC5ldmVudF9uYW1lCisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFy
YW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFpcnMuYXBw
ZW5kKCclczooJXMpJXMnICUgKHBhcmFtX25hbWUsIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zv
cl9wYXJhbShkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUp
KQorICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCisgICAgICAgIHJldHVybiAn
LSAodm9pZCklc1dpdGglcycgJSAoZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQor
CisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4sIGV2
ZW50KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOycpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhv
ZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSkKKyAgICAgICAgICAgIHZhcl9uYW1lID0gcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBzYWZlX3Zhcl9uYW1lID0gJygqJXMpJyAl
IHZhcl9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCisgICAgICAg
ICAgICBleHBvcnRfZXhwcmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9leHBv
cnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHNhZmVfdmFyX25hbWUp
CisgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHBhcmFtc09iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIp
LCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4
cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lcyhBU0NJ
SUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09i
amVjdCk7JykKKyAgICAgICAgcmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19o
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uMGFiYTEzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRl
ci5weQpAQCAtMCwwICsxLDIyNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHly
aWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdo
dCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBn
ZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9u
YW1lCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIGdlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zy
b20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZQorCitsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgYWRkX3doaXRlc3BhY2Vfc2VwYXJhdG9yKGxpbmVz
KToKKyAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgICAgICByZXR1cm4KKyAg
ICBsaW5lcy5hcHBlbmQoJycpCisKKworY2xhc3MgT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRvcihH
ZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
OgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRo
KQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICclcy5o
JyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBzZXQoWworICAgICAgICAgICAgJzxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+JywKKyAgICAgICAgXSkKKworICAgICAgICBoZWFk
ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQg
JyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAorICAgICAgICB9CisK
KyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHR5
cGVfZG9tYWlucyA9IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5f
dHlwZXNfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCisgICAgICAgIGNvbW1hbmRfZG9t
YWlucyA9IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFu
ZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQorICAgICAgICBldmVudF9k
b21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVu
dF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQorCisgICAgICAgICMg
RklYTUU6IEN1cnJlbnRseSB3ZSBnZW5lcmF0ZSBlbnVtcy90eXBlcyBmb3IgYWxsIHR5cGVzIGlu
IHRoZSB0eXBlX2RvbWFpbnMuCisgICAgICAgICMgRm9yIHRoZSBidWlsdC1pbiBKU0MgZG9tYWlu
cyAoRGVidWdnZXIsIFJ1bnRpbWUpIHRoaXMgcHJvZHVjZXMgZXh0cmEgdW51c2VkIHR5cGVzLgor
ICAgICAgICAjIFdlIG9ubHkgbmVlZCB0byBnZW5lcmF0ZSB0aGVzZSB0eXBlcyBpZiB0aGV5IGFy
ZSByZWZlcmVuY2VkIGJ5IHRoZSBjb21tYW5kX2RvbWFpbnMKKyAgICAgICAgIyBvZiBldmVudF9k
b21haW5zLgorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoVGVtcGxhdGVzLk9iakNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBt
YXAoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlucykpKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYu
X2dlbmVyYXRlX2VudW1zLCB0eXBlX2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlcywgdHlwZV9k
b21haW5zKSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5v
bmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scywgY29tbWFuZF9kb21haW5z
KSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1h
cChzZWxmLl9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzLCBldmVudF9kb21haW5zKSkpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNIZWFkZXJQb3N0bHVk
ZSkuc3Vic3RpdHV0ZShOb25lKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25z
KQorCisgICAgZGVmIF9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmLCBkb21haW4p
OgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4u
dHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShkZWNsYXJhdGlv
bi50eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICAgICAgb2JqY19uYW1lID0gT2JqQ0dl
bmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRpb24udHlwZSkKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ0BjbGFzcyAlczsnICUgb2JqY19uYW1lKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9lbnVtcyhzZWxmLCBkb21h
aW4pOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1i
ZXIgZW51bXMuCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJh
dGlvbnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIEVudW1U
eXBlKToKKyAgICAgICAgICAgICAgICBhZGRfd2hpdGVzcGFjZV9zZXBhcmF0b3IobGluZXMpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6
CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICAgICAg
YWRkX3doaXRlc3BhY2Vfc2VwYXJhdG9yKGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIoZG9t
YWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKworICAgICAgICAjIEFub255bW91cyBjb21tYW5k
IGVudW1zLgorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAg
ICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1l
dGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICBhZGRfd2hpdGVzcGFj
ZV9zZXBhcmF0b3IobGluZXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5j
b21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShw
YXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6
CisgICAgICAgICAgICAgICAgICAgIGFkZF93aGl0ZXNwYWNlX3NlcGFyYXRvcihsaW5lcykKKyAg
ICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19l
bnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVy
KSkKKworICAgICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4KKyAgICAgICAgZm9yIGV2ZW50
IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2
ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIu
dHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICAgICAgICAgIGFkZF93aGl0ZXNwYWNlX3NlcGFyYXRvcihsaW5lcykKKyAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9w
YXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3R5cGVzKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgIyBUeXBlIGludGVyZmFjZXMu
CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6Cisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgor
ICAgICAgICAgICAgICAgIGFkZF93aGl0ZXNwYWNlX3NlcGFyYXRvcihsaW5lcykKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9pbnRlcmZhY2UoZG9tYWlu
LCBkZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4s
IGRlY2xhcmF0aW9uKToKKyAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9i
amNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIGRlY2xh
cmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAg
ICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fu
b255bW91c19lbnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICByZXR1cm4g
c2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2VudW1fbmFtZSwgbWVtYmVyLnR5cGUuZW51bV92YWx1
ZXMoKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihz
ZWxmLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAgICAg
b2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1v
dXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRl
cikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIHBh
cmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCkpCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW0oc2Vs
ZiwgZW51bV9uYW1lLCBlbnVtX3ZhbHVlcyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAg
bGluZXMuYXBwZW5kKCd0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCAlcykgeycgJSBlbnVtX25h
bWUpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdmFsdWVzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgJXMlcywnICUgKGVudW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVk
X25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J307JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJh
dGVfdHlwZV9pbnRlcmZhY2Uoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgb2JqY19uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9y
X3R5cGUoZGVjbGFyYXRpb24udHlwZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNl
ICVzIDogJXMnICUgKG9iamNfbmFtZSwgT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JB
U0UpKQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5v
dCBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAg
b3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9u
YWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgaWYgcmVxdWlyZWRfbWVtYmVy
czoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9m
b3JfcmVxdWlyZWRfbWVtYmVycyhkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJz
KSkKKyAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcvKiByZXF1aXJlZCAqLyAnICsgc2VsZi5fZ2VuZXJhdGVfbWVtYmVyX3By
b3BlcnR5KGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICBmb3IgbWVtYmVyIGluIG9wdGlv
bmFsX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qIG9wdGlvbmFsICovICcg
KyBzZWxmLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkoZGVjbGFyYXRpb24sIG1lbWJlcikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJz
KHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpOgorICAgICAgICBw
YWlycyA9IFtdCisgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAg
ICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5p
ZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAg
ICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAodmFyX25hbWUsIG9iamNfdHlwZSwgdmFy
X25hbWUpKQorICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCisgICAgICAgIHJl
dHVybiAnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoJXM7JyAlICcgJy5qb2luKHBhaXJzKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkoc2VsZiwgZGVjbGFyYXRpb24sIG1lbWJl
cik6CisgICAgICAgIGFjY2Vzc29yX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfYWNjZXNzb3Jf
dHlwZV9mb3JfbWVtYmVyKG1lbWJlcikKKyAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICByZXR1
cm4gJ0Bwcm9wZXJ0eSAobm9uYXRvbWljLCAlcykgJXM7JyAlIChhY2Nlc3Nvcl90eXBlLCBqb2lu
X3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2Jq
Y19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9j
b21tYW5kX3Byb3RvY29scyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGlmIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9t
YWluSGFuZGxlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9u
YW1lKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAcHJvdG9jb2wgJXMgPE5TT2JqZWN0Picg
JSBvYmpjX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0ByZXF1aXJlZCcpCisgICAg
ICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKGRvbWFp
biwgY29tbWFuZCkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zaW5nbGVfY29tbWFu
ZF9wcm90b2NvbChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBwYWlycyA9IFtdCisg
ICAgICAgIHBhaXJzLmFwcGVuZCgnRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2snKQorICAgICAgICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFj
azooJXMpc3VjY2Vzc0NhbGxiYWNrJyAlIHNlbGYuX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5k
KGRvbWFpbiwgY29tbWFuZCkpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFt
ZSwgT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21t
YW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQorICAgICAgICByZXR1cm4gJy0gKHZv
aWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQor
CisgICAgZGVmIF9jYWxsYmFja19ibG9ja19mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1h
bmQpOgorICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZChqb2luX3R5cGVf
YW5kX25hbWUoT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFu
ZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisg
ICAgICAgIHJldHVybiAndm9pZCheKSglcyknICUgJywgJy5qb2luKHBhaXJzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVz
ID0gW10KKyAgICAgICAgaWYgZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIG9iamNfbmFtZSA9
ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
LCBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZh
Y2UgJXMgOiBOU09iamVjdCcgJSBvYmpjX25hbWUpCisgICAgICAgICAgICBmb3IgZXZlbnQgaW4g
ZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShkb21haW4sIGV2ZW50KSkKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2Uoc2VsZiwgZG9tYWluLCBldmVu
dCk6CisgICAgICAgIGlmIG5vdCBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAg
cmV0dXJuICctICh2b2lkKSVzOycgJSBldmVudC5ldmVudF9uYW1lCisgICAgICAgIHBhaXJzID0g
W10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAg
ICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHBhcmFtX25hbWUsIE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlciks
IHBhcmFtX25hbWUpKQorICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCisgICAg
ICAgIHJldHVybiAnLSAodm9pZCklc1dpdGglczsnICUgKGV2ZW50LmV2ZW50X25hbWUsICcgJy5q
b2luKHBhaXJzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5CnNpbWlsYXJpdHkgaW5kZXgg
NTAlCmNvcHkgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpjb3B5
IHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRlci5weQppbmRleCAwYWY2M2QzLi5iYWRjOGMy
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkKQEAgLTI3LDY1ICsyNyw0OSBAQAogCiBp
bXBvcnQgbG9nZ2luZwogaW1wb3J0IHN0cmluZwotaW1wb3J0IHJlCiBmcm9tIHN0cmluZyBpbXBv
cnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBnZW5l
cmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvciwgdWNmaXJzdAogZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQogCiAKLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6CitjbGFzcyBPYmplY3RpdmVDVHlwZXNJbnRlcm5hbEhlYWRlckdl
bmVyYXRvcihHZW5lcmF0b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpOgogICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0
dXJuICdJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCcKKyAgICAgICAgcmV0
dXJuICclc0ludGVybmFsLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAogCiAgICAgZGVm
IGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgaGVhZGVycyA9IFsKLSAgICAgICAgICAg
ICciSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIicsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+JywKLSAgICAgICAgXQorICAgICAgICBo
ZWFkZXJzID0gc2V0KFsKKyAgICAgICAgICAgICciJXMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpD
X1BSRUZJWCwKKyAgICAgICAgICAgICciUldJUHJvdG9jb2xKU09OT2JqZWN0SW50ZXJuYWwuaCIn
LAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAg
ICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4nLAorICAgICAgICBdKQogCiAgICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAg
J2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVu
YW1lKCkpLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyAr
IGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6
ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFk
ZXJzKV0pLAogICAgICAgICB9CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpCisgICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5z
aG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwo
KSksIGRvbWFpbnMpCisKICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQcmVsdWRlKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xu
Jy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlv
bnNfZm9yX2RvbWFpbiwgZG9tYWlucykpKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoVGVtcGxhdGVzLk9iakNHZW5lcmljSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAq
KmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRl
cihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVy
ZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAq
KmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCi0g
ICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRv
bWFpbik6Ci0gICAgICAgIGlmIG5vdCBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICByZXR1
cm4gJycKLQotICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBj
b21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5k
KGNvbW1hbmQpKQotCi0gICAgICAgIGhhbmRsZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21h
aW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJh
dGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpLAotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4s
IFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFp
bkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJf
YXJncykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1h
bmQoc2VsZiwgY29tbWFuZCk6CisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3By
aXZhdGVfaW50ZXJmYWNlcyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElkJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIg
aW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVu
ZCgnJXMgaW5fJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1h
bF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQot
Ci0gICAgICAgIGNvbW1hbmRfYXJncyA9IHsKLSAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNv
bW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4o
cGFyYW1ldGVycyksCi0gICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVh
bCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2Fy
Z3MpCisgICAgICAgIGlmIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBvYmpjX25hbWUgPSAn
JXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwg
ZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNl
ICVzIChQcml2YXRlKScgJSBvYmpjX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOycpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ0BlbmQnKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19p
bXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYWJm
YjQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkKQEAgLTAsMCArMSwxNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmln
aHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVj
dFR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworZGVmIGFkZF93
aGl0ZXNwYWNlX3NlcGFyYXRvcihsaW5lcyk6CisgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9
PSAnJzoKKyAgICAgICAgcmV0dXJuCisgICAgbGluZXMuYXBwZW5kKCcnKQorCisKK2NsYXNzIE9i
amVjdGl2ZUNUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRv
ci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0
X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzVHlwZXMubW0nICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Cisg
ICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWlu
X3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHNlY29u
ZGFyeV9oZWFkZXJzID0gWworICAgICAgICAgICAgJyIlc0VudW1Db252ZXJzaW9uSGVscGVycy5o
IicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAgJzx3dGYvQXNzZXJ0aW9ucy5o
PicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKKyAgICAgICAgXQorCisgICAg
ICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIlc0lu
dGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnc2Vj
b25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICVzJyAlIGhlYWRlciBmb3IgaGVh
ZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgIH0KKworICAgICAgICBkb21haW5z
ID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0ltcGxlbWVudGF0aW9uUHJlbHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKG1hcChzZWxmLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zLCBkb21haW5zKSkKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSW1wbGVtZW50YXRp
b25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0
dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRlX3R5cGVfaW1wbGVt
ZW50YXRpb25zKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9y
IGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlm
IChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAg
ICAgICBhZGRfd2hpdGVzcGFjZV9zZXBhcmF0b3IobGluZXMpCisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xh
cmF0aW9uKSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5l
cmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgorICAg
ICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVz
JyAlIE9iakNHZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5cGUpKQor
ICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1i
ZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgaWYgcmVx
dWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVt
YmVycyhkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKSkKKyAgICAgICAgZm9y
IG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2V0dGVy
X2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9n
ZXR0ZXJfZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zv
cl9yZXF1aXJlZF9tZW1iZXJzKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21l
bWJlcnMpOgorICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWly
ZWRfbWVtYmVyczoKKyAgICAgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190
eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgICAgIHZhcl9uYW1l
ID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVt
YmVyX25hbWUpCisgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAodmFyX25h
bWUsIG9iamNfdHlwZSwgdmFyX25hbWUpKQorICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFp
cnNbMF0pCisgICAgICAgICMgRklYTUU6IFRocm93IGV4Y2VwdGlvbiBpZiBhbnkgYXJndW1lbnRz
IGFyZSBuaWwuCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCctIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGglczsnICUgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghc2VsZiknKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG5pbDsnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCisgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAg
IHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllciht
ZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmLiVz
ID0gJXM7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiBzZWxmOycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIG1l
bWJlcik6CisgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9t
ZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJh
dG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKKyAg
ICAgICAgc2V0dGVyX21ldGhvZCA9IE9iakNHZW5lcmF0b3Iub2JqY19zZXR0ZXJfbWV0aG9kX2Zv
cl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgY29udmVyc2lvbl9leHByZXNz
aW9uID0gT2JqQ0dlbmVyYXRvci5vYmpjX3RvX3Byb3RvY29sX2V4cHJlc3Npb25fZm9yX21lbWJl
cihkZWNsYXJhdGlvbiwgbWVtYmVyLCB2YXJfbmFtZSkKKyAgICAgICAgIyBGSVhNRTogVGhyb3cg
ZXhjZXB0aW9uIGlmIGFyZ3VtZW50IGlzIG5pbC4KKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJy0gKHZvaWQpc2V0JXM6KCVzKSVzJyAlICh1Y2ZpcnN0KHZhcl9uYW1l
KSwgb2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFtzdXBlciAlczolcyBmb3JLZXk6QCIlcyJdOycgJSAoc2V0
dGVyX21ldGhvZCwgY29udmVyc2lvbl9leHByZXNzaW9uLCBtZW1iZXIubWVtYmVyX25hbWUpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQorCisgICAgZGVmIF9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRl
Y2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9i
amNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIHZhcl9uYW1l
ID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVt
YmVyX25hbWUpCisgICAgICAgIGdldHRlcl9tZXRob2QgPSBPYmpDR2VuZXJhdG9yLm9iamNfZ2V0
dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIGJhc2lj
X2V4cHJlc3Npb24gPSAnW3N1cGVyICVzOkAiJXMiXScgJSAoZ2V0dGVyX21ldGhvZCwgbWVtYmVy
Lm1lbWJlcl9uYW1lKQorICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpDR2VuZXJh
dG9yLnByb3RvY29sX3RvX29iamNfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBt
ZW1iZXIsIGJhc2ljX2V4cHJlc3Npb24pCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCctICglcyklcycgJSAob2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiAlczsnICUg
Y29udmVyc2lvbl9leHByZXNzaW9uKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IGVjZmUzYWIuLjQ3YjQzODIg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBl
c19oZWFkZXIucHkKQEAgLTExMSw3ICsxMTEsNyBAQCBjbGFzcyBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdj
bGFzcyAlczsnICUgbmFtZSBmb3IgbmFtZSBpbiBzb3J0ZWQob2JqZWN0X3R5cGVfbmFtZXMpKQog
ICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnZW51bSBjbGFzcyAlczsnICUgbmFtZSBm
b3IgbmFtZSBpbiBzb3J0ZWQoZW51bV90eXBlX25hbWVzKSkKICAgICAgICAgICAgIGRvbWFpbl9s
aW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21h
aW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFp
bl9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKICAgICAgICAgICAg
IHJldHVybiAnJwpAQCAtMTUwLDcgKzE1MCw3IEBAIGNsYXNzIFByb3RvY29sVHlwZXNIZWFkZXJH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMg
eycgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnXG5cbicuam9p
bihzZWN0aW9ucykpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9t
YWluX25hbWUpCi0gICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAg
c2VjdGlvbnMgPSBbXQpAQCAtMTY5LDcgKzE2OSw3IEBAIGNsYXNzIFByb3RvY29sVHlwZXNIZWFk
ZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2Ug
JXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnXG4nLmpv
aW4oc2VjdGlvbnMpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRv
bWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3Jf
ZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAg
ZGVmIF9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVj
bGFyYXRpb24sIGRvbWFpbik6CiAgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVycykgPT0gMDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpvbGQgbW9kZSAxMDA2NDQKbmV3
IG1vZGUgMTAwNzU1CmluZGV4IDU2YjQyNjUuLmI5YzQzOGYKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpA
QCAtMzAsNyArMzAsNyBAQCBpbXBvcnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQog
CiBmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZQorZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1p
dGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBG
cmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC0yMDAs
MTggKzIwMCwyMSBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgIHNlbGYuX2Fzc2lnbmVkX2Vu
dW1fdmFsdWVzLmFwcGVuZChlbnVtX3ZhbHVlKQogCiAgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQg
bWFuaXB1bGF0aW9uIHJvdXRpbmVzLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgd3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCB0ZXh0KToKLSAgICAgICAgZ3VhcmQgPSBkb21h
aW4uZmVhdHVyZV9ndWFyZAotICAgICAgICBpZiBndWFyZCBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIGxpbmVzID0gWwotICAgICAgICAgICAgICAgICcjaWYgJXMnICUgZ3VhcmQsCi0gICAgICAg
ICAgICAgICAgdGV4dCwKLSAgICAgICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGd1YXJkCi0g
ICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLSAg
ICAgICAgZWxzZToKKyAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluLCB0ZXh0KToKKyAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdv
cmtzLldlYkluc3BlY3RvcjoKICAgICAgICAgICAgIHJldHVybiB0ZXh0CisgICAgICAgIGd1YXJk
ID0gZG9tYWluLmZlYXR1cmVfZ3VhcmQKKyAgICAgICAgaWYgZ3VhcmQ6CisgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChndWFyZCwgdGV4dCkKKyAgICAgICAgcmV0
dXJuIHRleHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgd3JhcF93aXRoX2d1YXJkKGd1
YXJkLCB0ZXh0KToKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihbCisgICAgICAgICAgICAnI2lm
ICVzJyAlIGd1YXJkLAorICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICcjZW5kaWYgLy8g
JXMnICUgZ3VhcmQsCisgICAgICAgIF0pCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHN0
eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSk6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVt
cGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCBmOTJkNzI0Li5mZThlZDU5IDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTMwNCw1ICszMDQsMTI5
IEBAICR7Y29uc3RydWN0b3JFeGFtcGxlfQogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29i
amVjdFR5cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlw
ZV9jYXN0X3Byb2JsZW0pOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDwke29iamVjdFR5cGV9Kj4o
c3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgp
KSk7CiB9Ci0iIiIKLSkKKyIiIikKKworICAgIE9iakNIZWFkZXJQcmVsdWRlID0gKAorICAgICIi
IiNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCiske2luY2x1ZGVzfQorIiIiKQor
CisgICAgT2JqQ0hlYWRlclBvc3RsdWRlID0gKAorICAgICIiIiIiIikKKworICAgIE9iakNDb252
ZXJzaW9uSGVscGVyc1ByZWx1ZGUgPSAoCisgICAgIiIiJHtpbmNsdWRlc30KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7IiIiKQorCisgICAgT2JqQ0NvbnZlcnNpb25IZWxwZXJzUG9zdGx1ZGUgPSAo
CisgICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisiIiIpCisKKyAgICBPYmpDR2VuZXJp
Y0hlYWRlclByZWx1ZGUgPSAoCisgICAgIiIiJHtpbmNsdWRlc30iIiIpCisKKyAgICBPYmpDR2Vu
ZXJpY0hlYWRlclBvc3RsdWRlID0gKAorICAgICIiIiIiIikKKworICAgIE9iakNDb252ZXJzaW9u
SGVscGVyc1N0YW5kYXJkID0gKAorICAgICIiInRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKTsiIiIpCisK
KyAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQcmVsdWRlID0gKAorICAgICIiIiR7aW5j
bHVkZXN9CisKKyR7Zm9yd2FyZERlY2xhcmF0aW9uc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisiIiIpCisKKyAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQb3N0bHVkZSA9ICgKKyAg
ICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyIiIikKKworICAgIE9iakNCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKKyAgICAiIiIjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgJHtwcmltYXJ5SW5jbHVkZX0KKworJHtzZWNvbmRhcnlJbmNsdWRlc30KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7IiIiKQorCisgICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25Qb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyIiIikKKworICAgIE9iakNJbXBsZW1lbnRhdGlvblByZWx1ZGUgPSAoCisgICAgIiIiI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICR7cHJpbWFyeUluY2x1ZGV9CisKKyR7c2Vjb25kYXJ5SW5j
bHVkZXN9CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7IiIiKQorCisgICAgT2JqQ0ltcGxl
bWVudGF0aW9uUG9zdGx1ZGUgPSAoCisgICAgIiIiIiIiKQorCisgICAgT2JqQ0JhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9uID0gKAorICAgICIi
ImNsYXNzIEFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+QWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Cit9OyIiIikKKworICAgIE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24gPSAoCisgICAg
IiIiY2xhc3MgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXIoaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Citwcml2
YXRlOgorICAgIFJldGFpblB0cjxpZDwke29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOworfTsiIiIpCisKKyAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJEb21haW5IYW5kbGVySW1wbGVtZW50YXRpb24gPSAoCisgICAgIiIidm9pZCBPYmpDSW5z
cGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoke2NvbW1hbmROYW1lfSgke3Bh
cmFtZXRlcnN9KQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgfTsKKworJHtzdWNjZXNzQ2FsbGJh
Y2t9Ciske2NvbnZlcnNpb25zfQorJHtpbnZvY2F0aW9ufQorfQorIiIiKQorCisgICAgT2JqQ0Nv
bmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHkgPSAoCisgICAgIiIiQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldCR7ZG9tYWluTmFtZX1IYW5kbGVyOikgaWQ8JHtvYmpjUHJl
Zml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPiAke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5k
bGVyOyIiIikKKworICAgIE9iakNDb25maWd1cmF0aW9uRXZlbnRQcm9wZXJ0eSA9ICgKKyAgICAi
IiJAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpICR7b2JqY1ByZWZpeH0ke2RvbWFpbk5h
bWV9RG9tYWluRXZlbnREaXNwYXRjaGVyICoke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3Bh
dGNoZXI7IiIiKQorCisgICAgT2JqQ0NvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHlJbXBsZW1l
bnRhdGlvbiA9ICgKKyAgICAiIiItICh2b2lkKXNldCR7ZG9tYWluTmFtZX1IYW5kbGVyOihpZDwk
e29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBp
ZiAoaGFuZGxlciA9PSBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgW18ke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyIHJlbGVhc2VdOworICAg
IF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRl
cm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIiR7ZG9tYWlu
TmFtZX0iKSwgV1RGOjptb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxl
ci0+YWdlbnRSZWdpc3RyeSgpLmFwcGVuZChXVEY6Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30K
KworLSAoaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPikke3Zhcmlh
YmxlTmFtZVByZWZpeH1IYW5kbGVyCit7CisgICAgcmV0dXJuIF8ke3ZhcmlhYmxlTmFtZVByZWZp
eH1IYW5kbGVyOworfSIiIikKKworICAgIE9iakNDb25maWd1cmF0aW9uR2V0dGVySW1wbGVtZW50
YXRpb24gPSAoCisgICAgIiIiLSAoJHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5FdmVu
dERpc3BhdGNoZXIgKikke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIKK3sKKyAg
ICBpZiAoIV8ke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF8k
e3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIgPSBbWyR7b2JqY1ByZWZpeH0ke2Rv
bWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6
X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNw
YXRjaGVyOworfSIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQppbmRleCBjOWMzNGM5Li44ZWE4YTc4IDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9tb2RlbHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vbW9kZWxzLnB5CkBAIC0zOSw2ICszOSw4IEBAIF9GUkFNRVdPUktfQ09ORklHX01B
UCA9IHsKICAgICAiSmF2YVNjcmlwdENvcmUiOiB7CiAgICAgICAgICJleHBvcnRfbWFjcm8iOiAi
SlNfRVhQT1JUX1BSSVZBVEUiCiAgICAgfSwKKyAgICAiV2ViSW5zcGVjdG9yIjogeworICAgIH0s
CiAgICAgIyBVc2VkIGZvciBjb2RlIGdlbmVyYXRvciB0ZXN0cy4KICAgICAiVGVzdCI6IHsKICAg
ICB9CkBAIC02OSw2ICs3MSw5IEBAIGNsYXNzIEZyYW1ld29yazoKICAgICAgICAgaWYgZnJhbWV3
b3JrU3RyaW5nID09ICJKYXZhU2NyaXB0Q29yZSI6CiAgICAgICAgICAgICByZXR1cm4gRnJhbWV3
b3Jrcy5KYXZhU2NyaXB0Q29yZQogCisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiV2Vi
SW5zcGVjdG9yIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLldlYkluc3BlY3Rvcgor
CiAgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiVGVzdCI6CiAgICAgICAgICAgICByZXR1
cm4gRnJhbWV3b3Jrcy5UZXN0CiAKQEAgLTc4LDYgKzgzLDcgQEAgY2xhc3MgRnJhbWV3b3JrOgog
Y2xhc3MgRnJhbWV3b3JrczoKICAgICBHbG9iYWwgPSBGcmFtZXdvcmsoIkdsb2JhbCIpCiAgICAg
SmF2YVNjcmlwdENvcmUgPSBGcmFtZXdvcmsoIkphdmFTY3JpcHRDb3JlIikKKyAgICBXZWJJbnNw
ZWN0b3IgPSBGcmFtZXdvcmsoIldlYkluc3BlY3RvciIpCiAgICAgVGVzdCA9IEZyYW1ld29yaygi
VGVzdCIpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKaW5kZXggNTc1ODY1Mi4uYjBjNzJiMCAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CkBAIC01Niw2ICs1
NiwxNSBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKICAgICBmcm9tIGdlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCiAgICAgZnJvbSBnZW5lcmF0ZV9mcm9udGVu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9v
YmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1w
b3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVy
IGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2lt
cGxlbWVudGF0aW9uIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252
ZXJzaW9uX2hlbHBlcnMgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2hlYWRlciBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfaW50ZXJuYWxfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmplY3Rp
dmVfY190eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgogICAgIGZyb20gZ2VuZXJhdGVfcHJv
dG9jb2xfdHlwZXNfaGVhZGVyIGltcG9ydCAqCiAgICAgZnJvbSBnZW5lcmF0ZV9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgogCkBAIC0xMTksMTQgKzEyOCwyNiBAQCBkZWYg
Z2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aD1Ob25lLAogICAgIHByb3RvY29sLnJlc29sdmVfdHlwZXMoKQogCiAgICAgZ2VuZXJhdG9ycyA9
IFtdCi0gICAgZ2VuZXJhdG9ycy5hcHBlbmQoQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0g
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKHByb3RvY29sLCBw
cmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGgpKQotICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCi0gICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAg
IGdlbmVyYXRvcnMuYXBwZW5kKEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgIGdlbmVy
YXRvcnMuYXBwZW5kKFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgZ2VuZXJhdG9ycy5hcHBlbmQoUHJvdG9j
b2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGgpKQorICAgIGlzX3Rlc3QgPSBwcm90b2NvbC5mcmFtZXdvcmsgaXMgRnJh
bWV3b3Jrcy5UZXN0CisgICAgaWYgaXNfdGVzdCBvciBwcm90b2NvbC5mcmFtZXdvcmsgaXMgbm90
IEZyYW1ld29ya3MuV2ViSW5zcGVjdG9yOgorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2Vu
ZENvbW1hbmRzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAg
Z2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3Rv
Y29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQorICAgIGlmIGlzX3Rlc3Qgb3IgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZy
YW1ld29ya3MuV2ViSW5zcGVjdG9yOgorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3Rp
dmVDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2
ZUNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmlt
YXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChP
YmplY3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqZWN0
aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2Jq
ZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVD
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9i
amVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDVHlwZXNJbnRlcm5hbEhl
YWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
IAogICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cyA9IFtdCiAKQEAgLTE1MCw3ICsxNzEs
NyBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlv
bl9maWxlcGF0aD1Ob25lLAogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgYWxs
b3dlZF9mcmFtZXdvcmtfbmFtZXMgPSBbJ0phdmFTY3JpcHRDb3JlJywgJ1Rlc3QnXQorICAgIGFs
bG93ZWRfZnJhbWV3b3JrX25hbWVzID0gWydKYXZhU2NyaXB0Q29yZScsICdXZWJJbnNwZWN0b3In
LCAnVGVzdCddCiAgICAgY2xpX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0i
dXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBQcmltYXJ5UHJvdG9jb2wuanNvbiBbU3VwcGxlbWVudGFs
UHJvdG9jb2wuanNvbiAuLi5dIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0t
b3V0cHV0RGlyIiwgaGVscD0iRGlyZWN0b3J5IHdoZXJlIGdlbmVyYXRlZCBmaWxlcyBzaG91bGQg
YmUgd3JpdHRlbi4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcmFtZXdvcmsiLCB0
eXBlPSJjaG9pY2UiLCBjaG9pY2VzPWFsbG93ZWRfZnJhbWV3b3JrX25hbWVzLCBoZWxwPSJUaGUg
ZnJhbWV3b3JrIHRoYXQgdGhlIHByaW1hcnkgc3BlY2lmaWNhdGlvbiBiZWxvbmdzIHRvLiIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKaW5kZXggYmE1YjU1ZS4uMjhlNWNh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtODMzLDMgKzgz
Myw4MDIgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikKIAogIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9i
amVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFJX
SVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxSV0lQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcg
Y2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92ZXJyaWRlOworcHJpdmF0ZToK
KyAgICBSZXRhaW5QdHI8aWQ8UldJUHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
UldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworICAgIGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJh
c2VIYW5kbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NF
UlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VI
YW5kbGVyOihpZDxSV0lQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgorewor
ICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBb
aGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxl
cik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0
ZXJuYXRlSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgi
RGF0YWJhc2UiKSwgV1RGOjptb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJv
bGxlci0+YWdlbnRSZWdpc3RyeSgpLmFwcGVuZChXVEY6Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsK
K30KKworLSAoaWQ8UldJUHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFu
ZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2wuaCIKKwor
QGludGVyZmFjZSBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFJXSVBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7CitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmls
ZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJS
V0lQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lv
bkhlbHBlcnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxs
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
LCBlcnJvcik7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnBheWxvYWQsIE5TSW50ZWdlciAqZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3Jl
ZW5Db2xvciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqY29sdW1uTmFt
ZXMpKTsKKyAgICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0
YW1wKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0
aW1lc3RhbXAiKSwgKnRpbWVzdGFtcCk7CisgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbKnZhbHVl
cyB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFsqcGF5bG9h
ZCB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwg
KmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFsqc3FsRXJyb3IgdG9J
bnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1By
b3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xv
ciIpLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdE9iamVjdC5yZWxlYXNlKCksIFN0
cmluZygpKTsKKyAgICB9OworCisgICAgTlNJbnRlZ2VyIG9faW5fZGF0YWJhc2VJZCA9IGluX2Rh
dGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFtt
X2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBOU0ludGVnZXIgKmRhdGFiYXNl
SWQsIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3Rv
clN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICpub3Rl
cyk7CisgICAgICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAqdGltZXN0YW1wKTsKKyAgICAgICAg
aWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgidmFsdWVzIiksIFsqdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlm
IChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgWypwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlm
IChkYXRhYmFzZUlkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAqZGF0YWJhc2VJZCk7CisgICAgICAgIGlmIChzcWxFcnJv
cikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgWypzcWxFcnJvciB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAoc2Ny
ZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7CisgICAg
ICAgIGlmIChwcmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3Ip
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5nKCkpOworICAgIH07CisKKyAgICBOU0ludGVnZXIg
b19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVy
eSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9x
dWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgIH07CisKKyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1
ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgTlNJbnRlZ2VyIGRhdGFiYXNlSWQs
IFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3Rv
clN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbdmFsdWVz
IHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwg
ZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgic3FsRXJyb3IiKSwgW3NxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90
b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9y
KSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdE9iamVjdC5yZWxlYXNlKCksIFN0cmluZygpKTsKKyAgICB9OworCisgICAgTlNJbnRlZ2Vy
IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVl
cnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit2b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9u
ZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQorewor
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpLCBlcnJvcik7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNB
cnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUg
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpwYXlsb2FkLCBOU0ludGVnZXIgZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFz
ZUVycm9yICpzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVu
Q29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50
Q29sb3IpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVt
bk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxp
dGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0
XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2Fk
IiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3Nx
bEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5D
b2xvcikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBy
aW50Q29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdE9iamVjdC5yZWxlYXNl
KCksIFN0cmluZygpKTsKKyAgICB9OworCisgICAgTlNJbnRlZ2VyIG9faW5fZGF0YWJhc2VJZCA9
IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKwor
ICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0
YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlJXSVByb3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5oIgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBl
IGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpOworCisKK1N0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKTsKK2lubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzUmVkOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJyZWQiKTsK
KyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46CisgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImdyZWVuIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9yc0JsdWU6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsdWUi
KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBSV0lQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQorICAgICAgICByZXR1cm4gUldJ
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJs
dWUiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVl
OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9yc1JlZDsKK30KKworU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
IHZhbHVlKTsKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7
CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6
CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgUldJUHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
QmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAgfQorfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5
YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1h
Z2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gUldJUHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
WWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gUldJUHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
QmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47
Cit9CisKK1N0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpOworaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVl
KSB7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
Y3lhbiIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgorICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxhdGU8Pgor
aW5saW5lIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47CisgICAgaWYg
KHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOworICAg
IGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7Cisg
ICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworfQorCitT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yIHZhbHVlKTsKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRj
aCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKKyAgICBj
YXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOgor
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBSV0lQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiYmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBSV0lQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFJXSVBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1
ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisg
ICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9y
WWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gUldJUHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yQ3lhbjsKK30KKworU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUpOworaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
Im1hZ2VudGEiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQ
cmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsK
KyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxh
Y2s6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAgfQorfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gImN5YW4iKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAg
IHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2Vu
dGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVl
ID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW47Cit9
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29s
RW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVy
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3I7
CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMpIHsKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAg
ICBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAorICAgIFJXSVByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvcikgeworICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKKyAgICBS
V0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JZZWxsb3csCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yKSB7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCisgICAgUldJUHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGEs
CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvclllbGxvdywKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENv
bG9yKSB7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5
YW4sCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2Vu
dGEsCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxv
dywKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2ss
Cit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jUHJpbnRDb2xvcikgeworICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jUHJpbnRDb2xvck1hZ2VudGEsCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3JCbGFjaywKK307CisKKworQGludGVyZmFjZSBSV0lQcm90b2NvbERh
dGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihOU0ludGVnZXIpY29kZTsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2Fn
ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TSW50ZWdl
ciBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgUldJUHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXIgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXls
b2FkLCBOU0ludGVnZXIgKmRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNx
bEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIFJX
SVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KE5TSW50ZWdlcilk
YXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnBheWxvYWQsIE5TSW50ZWdlciAqZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3Jl
ZW5Db2xvciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KE5TSW50ZWdlcilkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZCll
eGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5n
PiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2Fk
LCBOU0ludGVnZXIgZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJv
ciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJXSVByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6KE5TSW50ZWdlcilkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAq
KXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZCwgTlNJbnRlZ2VyIGRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0
YWJhc2VFcnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNj
cmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooTlNJbnRlZ2VyKWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CitAZW5kCisKKworCisKKyMjIyBFbmQgRmlsZTog
UldJUHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihOU0ludGVn
ZXIpY29kZTsKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2Vs
Zi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBm
b3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENv
ZGU6KE5TSW50ZWdlciljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6
QCJjb2RlIl07Cit9CisKKy0gKE5TSW50ZWdlciljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBp
bnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQ
cm90b2NvbFR5cGVzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xKU09OT2JqZWN0
SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dAppbmRleCBlYjY3NjdlLi5lNzE3M2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTcyNCwzICs3MjQs
NzY5IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCiAKICMjIyBFbmQgRmlsZTogSW5zcGVjdG9yUHJvdG9jb2xPYmpl
Y3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CitAcHJvdG9jb2wgUldJUHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRv
dWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxv
YWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3Is
IGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBp
bl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3Bh
eWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29u
c3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgUmV0YWlu
UHRyPGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVy
bmFsLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3Rv
Y29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7CisgICAgaWQ8UldJUHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9k
YXRhYmFzZUhhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VIYW5k
bGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREYXRh
YmFzZUhhbmRsZXI6KGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVy
Cit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RhdGFiYXNlSGFuZGxl
ciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudDxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
LCBBbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRl
cmFsKCJEYXRhYmFzZSIpLCBXVEY6Om1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9j
b250cm9sbGVyLT5hZ2VudFJlZ2lzdHJ5KCkuYXBwZW5kKFdURjo6bW92ZShhbHRlcm5hdGVBZ2Vu
dCkpOworfQorCistIChpZDxSV0lQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJh
c2VIYW5kbGVyCit7CisgICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4g
RmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiUldJUHJvdG9jb2wuaCIKKworQGludGVyZmFjZSBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFi
YXNlSGFuZGxlcjopIGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFz
ZUhhbmRsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiUldJUHJvdG9jb2xJbnRlcm5hbC5o
IgorI2luY2x1ZGUgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheT4qIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVz
LCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
KiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3Nj
cmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpCit7CisgICAgaWQgZXJyb3JD
YWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGVycm9y
KTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgTlNJbnRlZ2VyICpkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KipzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9y
LCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKGNvbHVtbk5h
bWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNv
bHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOworICAgICAg
ICBpZiAobm90ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoIm5vdGVzIiksICpub3Rlcyk7CisgICAgICAgIGlmICh0aW1lc3RhbXApCisgICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAq
dGltZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFsqdmFsdWVzIHRvSW5zcGVjdG9y
T2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgWypwYXlsb2FkIHRvSW5zcGVjdG9y
T2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAqZGF0YWJhc2VJZCk7
CisgICAgICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgWypzcWxFcnJvciB0b0luc3BlY3Rvck9iamVj
dF0pOworICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmco
KnNjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmIChwcmludENvbG9yKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRvUHJvdG9j
b2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5nKCkpOworICAg
IH07CisKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7CisgICAg
aWYgKGluX2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX2NvbHVtbk5hbWVzID0gb2JqY1N0cmlu
Z0FycmF5KCppbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7CisgICAg
aWYgKGluX25vdGVzKQorICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOworICAgIGRvdWJs
ZSBvX2luX3RpbWVzdGFtcDsKKyAgICBpZiAoaW5fdGltZXN0YW1wKQorICAgICAgICBvX2luX3Rp
bWVzdGFtcCA9ICppbl90aW1lc3RhbXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2lu
X3ZhbHVlczsKKyAgICBpZiAoaW5fdmFsdWVzKQorICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6KmluX3Zh
bHVlc10gYXV0b3JlbGVhc2VdOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXls
b2FkOworICAgIGlmIChpbl9wYXlsb2FkKQorICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQ
cm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oippbl9wYXls
b2FkXSBhdXRvcmVsZWFzZV07CisgICAgTlNJbnRlZ2VyIG9faW5fZGF0YWJhc2VJZDsKKyAgICBp
ZiAoaW5fZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNl
SWQ7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yOworICAgIGlm
IChpbl9zcWxFcnJvcikKKyAgICAgICAgb19pbl9zcWxFcnJvciA9IFtbW1JXSVByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6KmluX3NxbEVycm9yXSBh
dXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb19pbl9z
Y3JlZW5Db2xvcjsKKyAgICBpZiAoaW5fc2NyZWVuQ29sb3IpCisgICAgICAgIG9faW5fc2NyZWVu
Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8UldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnM+KCppbl9zY3JlZW5Db2xvcik7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIG9faW5fcHJpbnRDb2xvcjsKKyAgICBpZiAoaW5f
cHJpbnRDb2xvcikKKyAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4oKmluX3ByaW50Q29sb3IpOworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1
bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVz
dGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3Zh
bHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3Bh
eWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlk
IDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2Ny
ZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IgOiBuaWwpIHByaW50
Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yIDogbmlsKV07Cit9CisKK3Zv
aWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXk+JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91Ymxl
IGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYg
aW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9w
cmludENvbG9yKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBOU0ludGVnZXIgZGF0YWJhc2VJZCwgUldJ
UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiks
IGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOworICAgICAgICByZXN1
bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXAp
OworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIp
LCBbdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0
XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFi
YXNlSWQiKSwgZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3NxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3Ii
KSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhw
cmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdE9iamVjdC5yZWxlYXNlKCksIFN0cmluZygpKTsKKyAgICB9OworCisgICAg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gb2JqY1N0cmluZ0FycmF5
KGluX2NvbHVtbk5hbWVzKTsKKyAgICBOU1N0cmluZyAqb19pbl9ub3RlcyA9IGluX25vdGVzOwor
ICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGluX3RpbWVzdGFtcDsKKyAgICBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9j
XSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDppbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9i
amVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6aW5fcGF5bG9hZF0gYXV0b3JlbGVh
c2VdOworICAgIE5TSW50ZWdlciBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAg
IFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1JXSVByb3RvY29s
RGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6aW5fc3FsRXJyb3Jd
IGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBvX2lu
X3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFJXSVByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzPihpbl9zY3JlZW5Db2xvcik7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Igb19pbl9wcmludENvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yPihpbl9wcmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5v
dGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVl
cyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJv
cjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IgcHJpbnRDb2xvcjpv
X2luX3ByaW50Q29sb3JdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlJXSVByb3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5oIgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0Vu
dW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpOworCisKK1N0cmluZyB0b1By
b3RvY29sU3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKTsKK2lu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJy
ZWQiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImdyZWVuIik7CisgICAgY2FzZSBSV0lQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
ImJsdWUiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBSV0lQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQorICAgICAgICByZXR1
cm4gUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUg
PT0gImJsdWUiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNCbHVlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSV0lQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKK30KKworU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
UldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
IHZhbHVlKTsKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAg
c3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJjeWFuIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoImJsYWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90
b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAg
ICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAg
cmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1
cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gUldJ
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxh
Y2s7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Cit9CisKK1N0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSk7CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOworICAgIGNhc2UgUldJUHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOworICAgIGNhc2UgUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93Ogor
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKKyAgICBjYXNlIFJXSVByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgor
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxh
dGU8PgoraW5saW5lIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9
PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAi
eWVsbG93IikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNr
IikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JDeWFuOworfQorCitTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSk7Citpbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7
CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKKyAg
ICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOwor
ICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwor
ICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBSV0lQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Cisg
ICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBp
ZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFs
dWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQ3lhbjsKK30KKworU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJ
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFs
dWUpOworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRj
aCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJj
eWFuIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1h
Z2VudGEiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5
ZWxsb3ciKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJs
YWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5n
KFN0cmluZyB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1
cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBSV0lQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2Vu
dGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Cisg
ICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Cit9CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50
ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFJXSVByb3RvY29sRGF0
YWJhc2VFcnJvcjsKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzUmVkLAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW4sCisgICAg
UldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yKSB7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFJXSVByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywK
KyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFJX
SVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5
YW4sCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yTWFnZW50YSwKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCisgICAgUldJUHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3cs
CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgUldJ
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFu
LAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yTWFnZW50YSwKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKworCitAaW50ZXJmYWNl
IFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KE5TSW50
ZWdlciljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbikgTlNJbnRlZ2VyIGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBSV0lQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKHZvaWQpZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKnBheWxvYWQsIE5TSW50ZWdlciAqZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5D
b2xvciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFi
YXNlSWQ6KE5TSW50ZWdlciAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6KFJXSVByb3RvY29sRGF0YWJh
c2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooUldJUHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgKilzY3JlZW5Db2xvciBwcmludENvbG9yOihSV0lQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOworLSAodm9p
ZClleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqcGF5bG9hZCwgTlNJbnRlZ2VyIGRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJh
c2VFcnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVl
bkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVz
dGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGRhdGFiYXNlSWQ6
KE5TSW50ZWdlcilkYXRhYmFzZUlkIHNxbEVycm9yOihSV0lQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KilzcWxFcnJvciBzY3JlZW5Db2xvcjooUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMp
c2NyZWVuQ29sb3IgcHJpbnRDb2xvcjooUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKK0BlbmQKKworCisKKworIyMjIEVu
ZCBGaWxlOiBSV0lQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbFR5cGVz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVs
cGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xE
YXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZSBjb2RlOihOU0ludGVnZXIpY29kZTsKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYubWVz
c2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtz
dXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3Ry
aW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2Fn
ZSJdOworfQorCistICh2b2lkKXNldENvZGU6KE5TSW50ZWdlciljb2RlCit7CisgICAgW3N1cGVy
IHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKE5TSW50ZWdlciljb2Rl
Cit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBSV0lQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSlNPTk9iamVjdEludGVybmFsLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5k
IEZpbGU6IFJXSVByb3RvY29sSW50ZXJuYWwuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uLXJlc3VsdAppbmRleCBjN2E2YTE0Li45MjdkOWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtNzIyLDMgKzcyMiw2MjUg
QEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKIAogIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgUldJ
UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgUldJUHJvdG9jb2xOZXR3
b3JrMkRvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgUldJUHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhh
bmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFJXSVByb3RvY29sTmV0d29yazFEb21haW5IYW5k
bGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRh
aW5QdHI8aWQ8UldJUHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwor
fTsKKworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlk
PFJXSVByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUg
PSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQpIG92ZXJyaWRlOwor
cHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8UldJUHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRs
ZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJSV0lQcm90
b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9u
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8UldJUHJvdG9jb2xOZXR3b3JrMURvbWFpbkhh
bmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7CisgICAgaWQ8UldJUHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtf
bmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2Vd
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6
KGlkPFJXSVByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYg
KGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19u
ZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmsxSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAg
ICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudDxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3b3Jr
MSIpLCBXVEY6Om1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5h
Z2VudFJlZ2lzdHJ5KCkuYXBwZW5kKFdURjo6bW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCist
IChpZDxSV0lQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7
CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazNI
YW5kbGVyOihpZDxSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4paGFuZGxlcgorewor
ICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrM0hhbmRsZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrM0hhbmRsZXIgPSBb
aGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxl
cik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciwgQWx0
ZXJuYXRlSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgi
TmV0d29yazMiKSwgV1RGOjptb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJv
bGxlci0+YWdlbnRSZWdpc3RyeSgpLmFwcGVuZChXVEY6Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsK
K30KKworLSAoaWQ8UldJUHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFu
ZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5o
IgorCitAaW50ZXJmYWNlIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8
UldJUHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFuZGxlcjsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrM0hhbmRsZXI6KSBpZDxS
V0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiUldJUHJvdG9jb2xFbnVt
Q29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpCit7CisgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCksIGVycm9yKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSwgU3RyaW5nKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCisKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkKK3sKKyAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwg
ZXJyb3IpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpLCBTdHJpbmcoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNv
dXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkKQoreworICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7Cisg
ICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCks
IFN0cmluZygpKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMldpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTMobG9uZyBjYWxsSWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICB9OworCisg
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgU3RyaW5nKCkp
OworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwor
dm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
NChsb25nIGNhbGxJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgIH07CisKKyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBTdHJpbmcoKSk7CisgICAgfTsK
KworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2Fs
bElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQs
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsKKyAgICB9OworCisgICAgW21f
ZGVsZWdhdGUgbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQpCit7Cisg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCksIGVycm9yKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSwgU3RyaW5nKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBs
b2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCkKK3sKKyAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJy
b3IpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpLCBTdHJpbmcoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBS
V0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbkhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9j
b2xTdHJpbmcoU3RyaW5nIHZhbHVlKTsKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFJXSVByb3RvY29sTmV0
d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9pZClsb2FkUmVz
b3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQK
KworQHByb3RvY29sIFJXSVByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyIDxOU09iamVjdD4K
K0ByZXF1aXJlZAorLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KSgpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTNXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVz
b3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZv
aWQpbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJv
cikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJh
Y2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0
cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3Vj
Y2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVBy
b3RvY29sLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEpTT05PYmplY3RJbnRlcm5hbC5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVu
ZCBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKaW5kZXggODNhMGQ5MS4uYTUwNWNmYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTU2NCwzICs1NjQsNTQ3IEBAIFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCiAKICMjIyBFbmQgRmlsZTogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJSV0lQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgUldJUHJv
dG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RhdGFiYXNlRXZlbnREaXNwYXRj
aGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVy
IHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoUldJUHJvdG9jb2xEYXRh
YmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRhdGFiYXNlRXZlbnREaXNwYXRjaGVyCit7Cisg
ICAgaWYgKCFfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kYXRhYmFzZUV2ZW50
RGlzcGF0Y2hlciA9IFtbUldJUHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciBh
bGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RhdGFi
YXNlRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorCitAaW50ZXJmYWNlIFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKmRhdGFiYXNl
RXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW5j
bHVkZSAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xFbnVtQ29u
dmVyc2lvbkhlbHBlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25I
ZWxwZXJzLmgiCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1
ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQ
cm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
UldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJz
aW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29s
RGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Cit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1u
TmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0
YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooUldJUHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBw
cmludENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9yCit7CisgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRDaGFubmVs
KCk7CisgICAgaWYgKCFmcm9udGVuZENoYW5uZWwpCisgICAgICAgIHJldHVybjsKKworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiks
IEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIpKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0Fy
cmF5KCgqY29sdW1uTmFtZXMpKSk7CisgICAgaWYgKG5vdGVzKQorICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICgqbm90ZXMpKTsKKyAgICBpZiAo
dGltZXN0YW1wKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwo
InRpbWVzdGFtcCIpLCAoKnRpbWVzdGFtcCkpOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFsoKnZhbHVlcykg
dG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgWygqcGF5bG9hZCkgdG9JbnNw
ZWN0b3JPYmplY3RdKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgWygqc3FsRXJyb3IpIHRvSW5zcGVj
dG9yT2JqZWN0XSk7CisgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICgqc2NyZWVuQ29sb3IpKTsK
KyAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJwcmludENvbG9yIiksICgqcHJpbnRDb2xvcikpOworICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsKKyAgICBm
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworfQorCistICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dp
dGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6
KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXBheWxvYWQgc3FsRXJyb3I6KFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9y
IHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIHByaW50Q29sb3I6KE5TU3RyaW5n
ICopcHJpbnRDb2xvcgoreworICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRD
aGFubmVsID0gX2NvbnRyb2xsZXItPmZyb250ZW5kQ2hhbm5lbCgpOworICAgIGlmICghZnJvbnRl
bmRDaGFubmVsKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFi
YXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNw
ZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0
RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAgcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgW3ZhbHVlcyB0b0luc3Bl
Y3Rvck9iamVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbc3FsRXJyb3IgdG9JbnNwZWN0
b3JPYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNj
cmVlbkNvbG9yIiksIHNjcmVlbkNvbG9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOworICAgIGZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2wuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9y
OworCisKKworCitAaW50ZXJmYWNlIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3Rv
Y29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KE5TSW50ZWdlciljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNJbnRlZ2VyIGNvZGU7CitAZW5kCisKKworCitA
aW50ZXJmYWNlIFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09i
amVjdAorLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoq
KW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5
bG9hZCBzcWxFcnJvcjooUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVl
bkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBwcmludENvbG9yOihOU1N0cmluZyAqKilw
cmludENvbG9yOworLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29s
dW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkIHNxbEVycm9yOihSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3Jl
ZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBwcmludENvbG9yOihOU1N0cmluZyAqKXBy
aW50Q29sb3I7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVt
Q29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZh
bHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9u
IFJXSVByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooTlNJbnRlZ2VyKWNvZGU7Cit7CisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwor
fQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihOU0ludGVnZXIpY29kZQor
eworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChO
U0ludGVnZXIpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUi
XTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorCisj
IyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90
b2NvbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xKU09OT2JqZWN0SW50ZXJuYWwuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgUldJ
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJv
dG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uLXJlc3VsdAppbmRleCBhZTczMDNhLi5jMzUwOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKQEAgLTYxMywzICs2MTMsNTc1IEBAIFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCiAKICMjIyBFbmQgRmlsZTogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgUldJUHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgUldJUHJvdG9jb2xOZXR3b3Jr
MkRvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgUldJUHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRs
ZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKyNpZiBQTEFURk9STShXRUJfQ09NTUFO
RFMpCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxSV0lQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpIG92ZXJy
aWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8UldJUHJvdG9jb2xOZXR3b3JrMURvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKyNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFO
RFMpCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
UldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gUldJUHJv
dG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKKyAgICBpZDxSV0lQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4g
X25ldHdvcmsxSGFuZGxlcjsKKyAgICBSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNw
YXRjaGVyICpfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNFdmVudERpc3Bh
dGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldE5l
dHdvcmsxSGFuZGxlcjooaWQ8UldJUHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRs
ZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFIYW5kbGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29yazFIYW5k
bGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZUluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxp
dGVyYWwoIk5ldHdvcmsxIiksIFdURjo6bW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAg
X2NvbnRyb2xsZXItPmFnZW50UmVnaXN0cnkoKS5hcHBlbmQoV1RGOjptb3ZlKGFsdGVybmF0ZUFn
ZW50KSk7Cit9CisKKy0gKGlkPFJXSVByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3
b3JrMUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKK30KKworLSAoUldJ
UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmszRXZlbnREaXNw
YXRjaGVyCit7CisgICAgaWYgKCFfbmV0d29yazNFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9u
ZXR3b3JrM0V2ZW50RGlzcGF0Y2hlciA9IFtbUldJUHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICBy
ZXR1cm4gX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisK
K0BpbnRlcmZhY2UgUldJUHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxSV0lQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNw
YXRjaGVyICpuZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJSV0lQcm90
b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBl
cnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKyNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCit2b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBjYWxs
SWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgU3RyaW5nKCkpOworICAgIH07CisKKyAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oV0VC
X0NPTU1BTkRTKQorCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5oIgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Q
cm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpOworCisKKworCisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVs
cGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKworCisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbE5ldHdvcmszRG9t
YWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworeworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKK3sKKyAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZENoYW5uZWwoKTsKKyAgICBpZiAoIWZyb250ZW5kQ2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJt
ZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCIpKTsKKyAgICBm
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgUldJUHJvdG9jb2xOZXR3b3Jr
Mk5ldHdvcmtFcnJvcjsKKworCisKKworQGludGVyZmFjZSBSV0lQcm90b2NvbE5ldHdvcmsyTmV0
d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooTlNJbnRlZ2VyKWNvZGU7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU0ludGVnZXIg
Y29kZTsKK0BlbmQKKworQHByb3RvY29sIFJXSVByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVy
IDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitAaW50ZXJmYWNlIFJXSVBy
b3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZCly
ZXNvdXJjZUxvYWRlZDsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlJXSVBy
b3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3
dGYvUGFzc1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCitA
aW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooTlNJbnRl
Z2VyKWNvZGU7Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNl
bGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2Ug
Zm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRD
b2RlOihOU0ludGVnZXIpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5
OkAiY29kZSJdOworfQorCistIChOU0ludGVnZXIpY29kZQoreworICAgIHJldHVybiBbc3VwZXIg
aW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKworCisjIyMgRW5kIEZpbGU6
IFJXSVByb3RvY29sVHlwZXMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sSW50ZXJu
YWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorI2ltcG9ydCAiUldJUHJvdG9j
b2xKU09OT2JqZWN0SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgUldJUHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKaW5kZXggODc0ZTg2YS4uMmVhOTIwNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApAQCAtNDMyLDMgKzQzMiw0MzggQEAg
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKIAogIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29s
UnVudGltZURvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgUldJUHJvdG9jb2xSdW50aW1lMkRvbWFp
bkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQt
ZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
KworI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorCitAaW50ZXJmYWNl
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJSV0lQcm90b2Nv
bEludGVybmFsLmgiCisjaW5jbHVkZSAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbkhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9j
b2xTdHJpbmcoU3RyaW5nIHZhbHVlKTsKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
UldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisK
KworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogUldJUHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisK
KworCisKKworCisKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2wuaAorCisj
IyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVu
dW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBF
bmQgRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9j
b2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2wuaCIKKyNpbXBvcnQgIlJXSVByb3Rv
Y29sSlNPTk9iamVjdEludGVybmFsLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sSW50ZXJuYWwu
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKaW5kZXggODQ0ODhjMy4u
NTNlNDcxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBAIC01
MDgsMyArNTA4LDUwNyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQogCiAjIyMgRW5kIEZpbGU6IEluc3BlY3RvclBy
b3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHBy
b3RvY29sIFJXSVByb3RvY29sUnVudGltZURvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJS
V0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5h
bC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2Nv
bENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NF
UlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5tbQor
CisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
UldJUHJvdG9jb2wuaCIKKworQGludGVyZmFjZSBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSV0lQ
cm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVs
cGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5oIgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBl
PgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpOworCisKK1N0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHZhbHVl
KTsKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoVHlwZSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
bnVsbCIpOworICAgIGNhc2UgUldJUHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc6Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInN0cmluZyIpOworICAgIGNhc2UgUldJUHJvdG9j
b2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
YXJyYXkiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBSV0lQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSAibnVsbCIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoVHlwZU51bGw7CisgICAgaWYgKHZhbHVlID09ICJzdHJpbmciKQorICAgICAgICByZXR1cm4g
UldJUHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc7CisgICAgaWYgKHZhbHVlID09ICJh
cnJheSIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5
OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZU51bGw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFJXSVByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9j
b2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQg
RmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBS
V0lQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFJX
SVByb3RvY29sUnVudGltZUtleVBhdGg7CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
UldJUHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpIHsKKyAgICBSV0lQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZU51bGwsCisgICAgUldJUHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmcs
CisgICAgUldJUHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheSwKK307CisKKworQGludGVy
ZmFjZSBSV0lQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihSV0lQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlw
ZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgUldJ
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdHlwZTsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOworLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYXJyYXk7CitA
ZW5kCisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZl
cnNpb25IZWxwZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFJX
SVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGU7Cit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLnR5
cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0VHlwZTooUldJ
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6
dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBlIl07Cit9CisKKy0gKFJXSVByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3Ry
aW5nPFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
dHlwZSJdKTsKK30KKworLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCit7Cisg
ICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKE5T
U3RyaW5nICopc3RyaW5nCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJp
bmciXTsKK30KKworLSAodm9pZClzZXRBcnJheTooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYXJy
YXkKK3sKKyAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9yU3RyaW5nQXJyYXko
YXJyYXkpIGZvcktleTpAImFycmF5Il07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWFycmF5Cit7CisgICAgcmV0dXJuIG9iamNTdHJpbmdBcnJheShbc3VwZXIgaW5zcGVjdG9yQXJy
YXlGb3JLZXk6QCJhcnJheSJdKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJv
dG9jb2xUeXBlcy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEpTT05PYmplY3RJ
bnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
KworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CmluZGV4IDRhZjVj
MmIuLmQ1YmMyM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uLXJlc3VsdApAQCAtNDI3LDMgKzQyNyw0MjcgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKIAogIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBSV0lQcm90b2NvbFJ1bnRpbWVE
b21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlJX
SVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xDb25maWd1cmF0aW9uCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOwor
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3Rv
Y29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMj
IyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiUldJ
UHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhl
bHBlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbkhl
bHBlcnMuaCIKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVl
KTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVBy
b3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVt
Q29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTog
UldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90
b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwor
CisKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2wuaAorCisjIyMgQmVnaW4g
RmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xF
bnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQg
RmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xJ
bnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisjaW1wb3J0ICJS
V0lQcm90b2NvbEpTT05PYmplY3RJbnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbElu
dGVybmFsLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CmluZGV4IGE2NjBkMzku
LjE1YjFkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1
bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApAQCAtNDUwLDMg
KzQ1MCw0NjggQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKIAogIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBS
V0lQcm90b2NvbERlYnVnZ2VyRG9tYWluSGFuZGxlcjsKK0Bwcm90b2NvbCBSV0lQcm90b2NvbFJ1
bnRpbWVEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQ29uZmlndXJh
dGlvbi5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJSV0lQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBS
V0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorCitAaW50
ZXJmYWNlIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTog
UldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiUldJUHJv
dG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxw
ZXJzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5oIgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90
b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpOworCisKK1N0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJX
SVByb3RvY29sRGVidWdnZXJSZWFzb24gdmFsdWUpOworaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFJXSVByb3RvY29sRGVidWdnZXJSZWFzb24gdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBSV0lQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKKyAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRGllZCIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEZWJ1Z2dl
clJlYXNvbkZhaW50ZWQ6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZhaW50ZWQiKTsK
KyAgICBjYXNlIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnk6CisgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoIkh1bmdyeSIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5l
IFJXSVByb3RvY29sRGVidWdnZXJSZWFzb24gZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIkRpZWQiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9j
b2xEZWJ1Z2dlclJlYXNvbkRpZWQ7CisgICAgaWYgKHZhbHVlID09ICJGYWludGVkIikKKyAgICAg
ICAgcmV0dXJuIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOworICAgIGlmICh2YWx1
ZSA9PSAiSHVuZ3J5IikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25I
dW5ncnk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29s
RGVidWdnZXJSZWFzb25EaWVkOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90
b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMj
IyBFbmQgRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBSV0lQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwor
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xEZWJ1Z2dlclJlYXNvbikgewor
ICAgIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkLAorICAgIFJXSVByb3RvY29sRGVidWdn
ZXJSZWFzb25GYWludGVkLAorICAgIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnksCit9
OworCisKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2wuaAorCisjIyMgQmVn
aW4gRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVy
c2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6
IFJXSVByb3RvY29sVHlwZXMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sSW50ZXJu
YWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xKU09OT2Jq
ZWN0SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggODhkYzA0OS4uZTczODcwMCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtNDU2LDMgKzQ1Niw0OTkgQEAgU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKIAogIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29sUnVudGltZURvbWFp
bkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1w
b3J0ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGlt
cGxlbWVudGF0aW9uIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbmNsdWRlICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEVu
dW1Db252ZXJzaW9uSGVscGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25I
ZWxwZXJzLmgiCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1
ZSk7CisKKworU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHMgdmFsdWUpOworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgUldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJQaWdzIik7CisgICAgY2FzZSBSV0lQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFs
c0Nvd3M6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkNvd3MiKTsKKyAgICBjYXNlIFJX
SVByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiQ2F0cyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5z
OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5zIik7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgUldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMgZnJvbVByb3RvY29s
U3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQorICAgICAg
ICByZXR1cm4gUldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1
ZSA9PSAiQ293cyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFs
c0Nvd3M7CisgICAgaWYgKHZhbHVlID09ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzQ2F0czsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAg
ICAgICByZXR1cm4gUldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFs
c1BpZ3M7Cit9CisKK1N0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHMgdmFsdWUpOworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJX
SVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBSV0lQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3M6
CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkR1Y2tzIik7CisgICAgY2FzZSBSV0lQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiSGVucyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0Nyb3dzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDcm93cyIpOworICAgIGNhc2Ug
UldJUHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvczoKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiRmxhbWluZ29zIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+Citp
bmxpbmUgUldJUHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscyBmcm9tUHJvdG9jb2xTdHJp
bmcoU3RyaW5nIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQorICAgICAgICBy
ZXR1cm4gUldJUHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOworICAgIGlmICh2
YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRpbWVUd29MZWdn
ZWRBbmltYWxzSGVuczsKKyAgICBpZiAodmFsdWUgPT0gIkNyb3dzIikKKyAgICAgICAgcmV0dXJu
IFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czsKKyAgICBpZiAodmFsdWUg
PT0gIkZsYW1pbmdvcyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRpbWVUd29MZWdn
ZWRBbmltYWxzRmxhbWluZ29zOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBSV0lQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3M7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRW51bUNvbnZlcnNp
b25IZWxwZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5o
PgorCisKKworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzKSB7CisgICAgUldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzLAor
ICAgIFJXSVByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293cywKKyAgICBSV0lQcm90b2NvbFJ1
bnRpbWVGYXJtQW5pbWFsc0NhdHMsCisgICAgUldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNI
ZW5zLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFscykgeworICAgIFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1h
bHNEdWNrcywKKyAgICBSV0lQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVucywKKyAg
ICBSV0lQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3MsCisgICAgUldJUHJvdG9j
b2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvcywKK307CisKKworCisKKworCisKKwor
IyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29s
LmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEpTT05PYmplY3RJbnRlcm5hbC5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxl
OiBSV0lQcm90b2NvbEludGVybmFsLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1
bHQKaW5kZXggYTU1NWQ4ZS4uMDI5ZWY4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKQEAgLTg4OSwzICs4ODksODIwIEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSkgewogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCiAKICMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworQHBy
b3RvY29sIFJXSVByb3RvY29sVGVzdERvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJ
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJX
SVByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFs
LmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VS
VChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJ
UHJvdG9jb2wuaCIKKworQGludGVyZmFjZSBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
KworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiUldJUHJvdG9j
b2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxw
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5oIgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgor
T2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpOworCisKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRW51
bUNvbnZlcnNpb25IZWxwZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvcjsK
K0BjbGFzcyBSV0lQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CitAY2xh
c3MgUldJUHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBSV0lQcm90b2Nv
bERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK0BjbGFzcyBSV0lQcm90
b2NvbERhdGFiYXNlRHVtbXlPYmplY3Q7CitAY2xhc3MgUldJUHJvdG9jb2xUZXN0UGFyYW1ldGVy
QnVuZGxlOworCisKKworCitAaW50ZXJmYWNlIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJX
SVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGNvZGU6KE5TSW50ZWdlciljb2RlOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNJbnRlZ2VyIGNvZGU7CitAZW5kCisK
K0BpbnRlcmZhY2UgUldJUHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDog
UldJUHJvdG9jb2xKU09OT2JqZWN0CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiBvcHRp
b25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwor
Lyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVy
cm9yOworQGVuZAorCitAaW50ZXJmYWNlIFJXSVByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5
bG9hZCBlcnJvcjooUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3I7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBh
eWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOworQGVuZAorCitAaW50ZXJmYWNlIFJXSVByb3Rv
Y29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWlu
dGVnZXIgYXJyYXk6KE5TU3RyaW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2
YWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0OworLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICppbnRlZ2VyOwor
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICphcnJh
eTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
c3RyaW5nOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3Ry
aW5nICp2YWx1ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqb2JqZWN0OworQGVuZAorCitAaW50ZXJmYWNlIFJXSVByb3RvY29sRGF0YWJhc2VE
dW1teU9iamVjdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIFJX
SVByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRp
bWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihSV0lQcm90b2NvbERhdGFiYXNl
RXJyb3IgKillcnJvcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnZhbHVlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4p
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CitA
ZW5kCisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
UldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJz
aW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gUldJUHJv
dG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZSBjb2RlOihOU0ludGVnZXIpY29kZTsKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNl
bGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQorewor
ICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0g
KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
bWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KE5TSW50ZWdlciljb2RlCit7CisgICAg
W3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKE5TSW50ZWdl
ciljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGUKKworLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVj
dG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9CisK
Ky0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJuIG9i
amNTdHJpbmdBcnJheShbc3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJd
KTsKK30KKworLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3RlcworeworICAgIFtzdXBl
ciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAoTlNTdHJpbmcgKilu
b3RlcworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKK30KKwor
LSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICBbc3VwZXIgc2V0
RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAoZG91YmxlKXRp
bWVzdGFtcAoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07
Cit9CisKKy0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMK
K3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKK30KKwor
LSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgcmV0dXJuIChSV0lQcm90
b2NvbEpTT05PYmplY3QgKilbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0g
KHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAg
IFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICByZXR1cm4gKFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKVtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKHZv
aWQpc2V0RXJyb3I6KFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1
cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQorCistIChSV0lQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIHJldHVybiAoUldJUHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFJXSVByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVz
dGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihSV0lQcm90b2NvbERhdGFiYXNlRXJy
b3IgKillcnJvcjsKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1l
czsKKyAgICBzZWxmLm5vdGVzID0gbm90ZXM7CisgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3Rh
bXA7CisgICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9h
ZDsKKyAgICBzZWxmLmVycm9yID0gZXJyb3I7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMK
K3sKKyAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9yU3RyaW5nQXJyYXkoY29s
dW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJuIG9iamNTdHJpbmdBcnJheShbc3Vw
ZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9pZClz
ZXROb3RlczooTlNTdHJpbmcgKilub3RlcworeworICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMg
Zm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAoTlNTdHJpbmcgKilub3RlcworeworICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAodm9pZClzZXRUaW1lc3Rh
bXA6KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBm
b3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAoZG91YmxlKXRpbWVzdGFtcAoreworICAgIHJl
dHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKHZvaWQpc2V0
VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBbc3VwZXIgc2V0
T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzCit7CisgICAgcmV0dXJuIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0gKHZvaWQpc2V0UGF5bG9hZDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtzdXBlciBzZXRPYmplY3Q6
cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXBheWxvYWQKK3sKKyAgICByZXR1cm4gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKVtzdXBl
ciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFJXSVBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1cGVyIHNldE9iamVjdDplcnJv
ciBmb3JLZXk6QCJlcnJvciJdOworfQorCistIChSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKill
cnJvcgoreworICAgIHJldHVybiAoUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICopW3N1cGVyIG9i
amVjdEZvcktleTpAImVycm9yIl07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFJXSVBy
b3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzCisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheTooTlNTdHJp
bmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmluZyAqKXZh
bHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3Q7Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmludGVn
ZXIgPSBpbnRlZ2VyOworICAgIHNlbGYuYXJyYXkgPSBhcnJheTsKKyAgICBzZWxmLnN0cmluZyA9
IHN0cmluZzsKKyAgICBzZWxmLnZhbHVlID0gdmFsdWU7CisgICAgc2VsZi5vYmplY3QgPSBvYmpl
Y3Q7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRJbnRlZ2VyOihOU1N0cmlu
ZyAqKWludGVnZXIKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOmludGVnZXIgZm9yS2V5OkAiaW50
ZWdlciJdOworfQorCistIChOU1N0cmluZyAqKWludGVnZXIKK3sKKyAgICByZXR1cm4gW3N1cGVy
IHN0cmluZ0ZvcktleTpAImludGVnZXIiXTsKK30KKworLSAodm9pZClzZXRBcnJheTooTlNTdHJp
bmcgKilhcnJheQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6YXJyYXkgZm9yS2V5OkAiYXJyYXki
XTsKK30KKworLSAoTlNTdHJpbmcgKilhcnJheQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAiYXJyYXkiXTsKK30KKworLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Cit9
CisKKy0gKE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JL
ZXk6QCJzdHJpbmciXTsKK30KKworLSAodm9pZClzZXRWYWx1ZTooTlNTdHJpbmcgKil2YWx1ZQor
eworICAgIFtzdXBlciBzZXRTdHJpbmc6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKK30KKworLSAo
TlNTdHJpbmcgKil2YWx1ZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAidmFs
dWUiXTsKK30KKworLSAodm9pZClzZXRPYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0Cit7CisgICAg
W3N1cGVyIHNldFN0cmluZzpvYmplY3QgZm9yS2V5OkAib2JqZWN0Il07Cit9CisKKy0gKE5TU3Ry
aW5nICopb2JqZWN0Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJvYmplY3Qi
XTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xEYXRhYmFzZUR1bW15
T2JqZWN0CisKK0BlbmQKKworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xUZXN0UGFyYW1l
dGVyQnVuZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooUldJ
UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3I7Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmNvbHVt
bk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAgc2VsZi5ub3RlcyA9IG5vdGVzOworICAgIHNlbGYu
dGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOworICAgIHNl
bGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAgc2VsZi5lcnJvciA9IGVycm9yOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omluc3Bl
Y3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQor
CistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiBv
YmpjU3RyaW5nQXJyYXkoW3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMi
XSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3Vw
ZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICop
bm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisK
Ky0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNl
dERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0
aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJd
OworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVz
Cit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisK
Ky0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIHJldHVybiAoUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOworfQorCist
ICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAg
ICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChS
V0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgcmV0dXJuIChSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworfQorCistICh2
b2lkKXNldEVycm9yOihSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFtz
dXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoUldJUHJvdG9j
b2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICByZXR1cm4gKFJXSVByb3RvY29sRGF0YWJh
c2VFcnJvciAqKVtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQ
cm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisjaW1wb3J0ICJSV0lQ
cm90b2NvbEpTT05PYmplY3RJbnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEludGVy
bmFsLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKaW5kZXggZTA5ZTU1Zi4u
NDVmMWIxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1
bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTc4OSwz
ICs3ODksNjEzIEBAIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFCiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKIAogIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgUldJUHJvdG9jb2xUZXN0
RG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
KworI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2Ug
UldJUHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJS
V0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiUldJUHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2luY2x1ZGUgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJX
SVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9uSGVscGVycy5oIgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmlu
ZyhTdHJpbmcgdmFsdWUpOworCisKK1N0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1ZSk7CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoUldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2
YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiUGlncyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ293
cyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czoKKyAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ2F0cyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVucyIp
OworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFscyBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSAiUGlncyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1h
bHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAgIHJldHVybiBSV0lQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOworICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCisg
ICAgICAgIHJldHVybiBSV0lQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzOworICAgIGlm
ICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFRlc3RVbmNhc3Rl
ZEFuaW1hbHNIZW5zOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSV0lQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOworfQorCitTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKTsKK2lubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKQorewor
ICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
c0R1Y2tzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJEdWNrcyIpOworICAgIGNhc2Ug
UldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoIkhlbnMiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93
czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ3Jvd3MiKTsKKyAgICBjYXNlIFJXSVBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoIkZsYW1pbmdvcyIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHMgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNEdWNrczsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAg
ICByZXR1cm4gUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVl
ID09ICJDcm93cyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
Q3Jvd3M7CisgICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4gUldJ
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEVu
dW1Db252ZXJzaW9uSGVscGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFJXSVByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2Fz
dDsKK0BjbGFzcyBSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxOworQGNsYXNzIFJXSVBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDI7CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgUldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7CisgICAgUldJUHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzUGlncywKKyAgICBSV0lQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHND
b3dzLAorICAgIFJXSVByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCisgICAgUldJUHJv
dG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVucywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpIHsKKyAgICBSV0lQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzRHVja3MsCisgICAgUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hl
bnMsCisgICAgUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dzLAorICAgIFJXSVByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKK0BpbnRlcmZhY2UgUldJUHJv
dG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooTlNJbnRl
Z2VyKW51bWJlciBhbmltYWxzOihSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMg
aWRlbnRpZmllcjooTlNJbnRlZ2VyKWlkZW50aWZpZXIgdHJlZTooUldJUHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MSAqKXRyZWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIE5TSW50ZWdlciBudW1iZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIGFuaW1h
bHM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU0ludGVn
ZXIgaWRlbnRpZmllcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4pIFJXSVByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKnRyZWU7CitAZW5kCisKK0BpbnRl
cmZhY2UgUldJUHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqb2JqOworQGVuZAorCitAaW50ZXJmYWNlIFJXSVBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy8qIG9w
dGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDEgKm9iajsKK0BlbmQKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogUldJ
UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1w
b3J0IDx3dGYvUGFzc1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
K0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KE5TSW50
ZWdlciludW1iZXIgYW5pbWFsczooUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxz
IGlkZW50aWZpZXI6KE5TSW50ZWdlcilpZGVudGlmaWVyIHRyZWU6KFJXSVByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDEgKil0cmVlOworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5zdHJpbmcgPSBzdHJp
bmc7CisgICAgc2VsZi5udW1iZXIgPSBudW1iZXI7CisgICAgc2VsZi5hbmltYWxzID0gYW5pbWFs
czsKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIHNlbGYudHJlZSA9IHRy
ZWU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5n
ICopc3RyaW5nCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5n
Il07Cit9CisKKy0gKE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJp
bmdGb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAodm9pZClzZXROdW1iZXI6KE5TSW50ZWdlcilu
dW1iZXIKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpudW1iZXIgZm9yS2V5OkAibnVtYmVyIl07
Cit9CisKKy0gKE5TSW50ZWdlciludW1iZXIKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJG
b3JLZXk6QCJudW1iZXIiXTsKK30KKworLSAodm9pZClzZXRBbmltYWxzOihSV0lQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9j
b2xTdHJpbmcoYW5pbWFscykgZm9yS2V5OkAiYW5pbWFscyJdOworfQorCistIChSV0lQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3Ry
aW5nPFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJh
bmltYWxzIl0pOworfQorCistICh2b2lkKXNldElkZW50aWZpZXI6KE5TSW50ZWdlcilpZGVudGlm
aWVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJdOwor
fQorCistIChOU0ludGVnZXIpaWRlbnRpZmllcgoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdl
ckZvcktleTpAImlkIl07Cit9CisKKy0gKHZvaWQpc2V0VHJlZTooUldJUHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnRyZWUgZm9yS2V5
OkAidHJlZSJdOworfQorCistIChSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJl
ZQoreworICAgIHJldHVybiAoUldJUHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKVtzdXBl
ciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFJX
SVByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKKworLSAodm9pZClzZXRPYmo6KFJXSVByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9i
aiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoUldJUHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MiAqKW9iagoreworICAgIHJldHVybiAoUldJUHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAq
KVtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gUldJUHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MgorCistICh2b2lkKXNldE9iajooUldJ
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagoreworICAgIFtzdXBlciBzZXRPYmpl
Y3Q6b2JqIGZvcktleTpAIm9iaiJdOworfQorCistIChSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxICopb2JqCit7CisgICAgcmV0dXJuIChSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxICopW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2Nv
bEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisjaW1wb3J0ICJSV0lQcm90b2Nv
bEpTT05PYmplY3RJbnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgK
</data>
<flag name="review"
          id="265204"
          type_id="1"
          status="+"
          setter="burg"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>240417</attachid>
            <date>2014-10-24 11:21:13 -0700</date>
            <delta_ts>2014-10-24 11:21:13 -0700</delta_ts>
            <desc>[PACKAGE] Static and Generated Sources</desc>
            <filename>Sources.zip</filename>
            <type>application/zip</type>
            <size>52588</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">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
ixBHRQqKZCDL1sCZ7DCk/A2DJkqBP/LkhRkJGT6UoqHDdwfMo45DFnSg0gM+TmFkXYOJUpwE6OgG
7dwwax1sUxyJ8Xm6Pmxjec94gWkv9hZ0KUMTJksbKttwpXXd4WSjm81lKsJ8i2BihKtl6vv0gMg1
iJWcd4bgqYbyq+z1aUH+qs2z0INDG2fGbi3SdpFahClUXN8ybmGjgN/DLJK+9RXzE2uboyuQTGyC
10tUQkKXkQ1LXr3KwNxUIYM6DunBB1hyfMVLqaiH9WeLcq0FpC/qNOCn4GWve9oRbFYN9XjyJh1R
4Ki4Krowat3YKyuMSTaYQkO9Yhf1jAyUgTlbuMdAmE/sKDqksMGrauS+anfrGPRdk5yAJV0RH21W
59K/QoGvI7E2X/WREqrNHIoxDTkThz1YsR4hWivFJzhnKqso3RRZQyvFYkHg8I5PQ7ZlmVHlVpai
eoipU4tRLR7laqkAhTgO3gousq9KpcKSsq+7rOdvwUuQKX7x+R4ngjjToKj5oarluRZSLFKWlylb
c578KJ5fn8rdMybT/wdQSwcIPPsLuGciAAAwAwEAUEsDBAoAAAAAAJFaWEUAAAAAAAAAAAAAAAAi
ABAAX19NQUNPU1gvU291cmNlcy9HZW5lcmF0ZWRTb3VyY2VzL1VYDABxmEpUcZhKVPUBFABQSwME
FAAIAAgA0lVYRQAAAAAAAAAAAAAAADEAEABfX01BQ09TWC9Tb3VyY2VzL0dlbmVyYXRlZFNvdXJj
ZXMvLl9SV0lQcm90b2NvbC5oVVgMABSRSlR8kEpU9QEUAGNgFWNnYGJg8E1MVvAPVohQgAKQGAMn
EBsB8RwgBvHPMRAFHENCgqBMkI4zUN3IgAkqzsjAIJecn6uXm5hclJ+bWJJarFecmpOaXJKZnxeU
mJeeClV/FqJWBk1tWWZxZlJOqmdeSmoFA4OhAQBQSwcIqIK6dW0AAADOAAAAUEsDBBQACAAIANJV
WEUAAAAAAAAAAAAAAAA4ABAAU291cmNlcy9HZW5lcmF0ZWRTb3VyY2VzL1JXSVByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmhVWAwAyJFKVHyQSlT1ARQA1Vpbc5tIFn7Xr+iqrdpJXIq1MztPdja1
CGGLLQk0gOzkaaYNbakniGa6GzmqVP77nm6QhCXERXa2snlwEPT5zqXPtWFw0UMXyGTphtPFUqI3
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
m5hclJ+bWJJarFecmpOaXJKZnxeUmJeeClV/FqJWBk1tWWZxZlJOqmdeSmoFA4OhAQBQSwcIqIK6
dW0AAADOAAAAUEsBAhUDCgAAAAAAi1pYRQAAAAAAAAAAAAAAAAgADAAAAAAAAAAAQO1BAAAAAFNv
dXJjZXMvVVgIAO2RSlRmmEpUUEsBAhUDFAAIAAgAi1pYRWoAiG2yAAAABBgAABEADAAAAAAAAAAA
QKSBNgAAAFNvdXJjZXMvLkRTX1N0b3JlVVgIAGaYSlRmmEpUUEsBAhUDCgAAAAAAkVpYRQAAAAAA
AAAAAAAAAAkADAAAAAAAAAAAQP1BNwEAAF9fTUFDT1NYL1VYCABxmEpUcZhKVFBLAQIVAwoAAAAA
AJFaWEUAAAAAAAAAAAAAAAARAAwAAAAAAAAAAED9QW4BAABfX01BQ09TWC9Tb3VyY2VzL1VYCABx
mEpUcZhKVFBLAQIVAxQACAAIAItaWEX0Gde8NAAAAHgAAAAcAAwAAAAAAAAAAECkga0BAABfX01B
Q09TWC9Tb3VyY2VzLy5fLkRTX1N0b3JlVVgIAGaYSlRmmEpUUEsBAhUDCgAAAAAA0lVYRQAAAAAA
AAAAAAAAABkADAAAAAAAAAAAQO1BOwIAAFNvdXJjZXMvR2VuZXJhdGVkU291cmNlcy9VWAgA7ZFK
VHyQSlRQSwECFQMUAAgACADSVVhFPPsLuGciAAAwAwEAJgAMAAAAAAAAAABApIGCAgAAU291cmNl
cy9HZW5lcmF0ZWRTb3VyY2VzL1JXSVByb3RvY29sLmhVWAgAFJFKVHyQSlRQSwECFQMKAAAAAACR
WlhFAAAAAAAAAAAAAAAAIgAMAAAAAAAAAABA/UFNJQAAX19NQUNPU1gvU291cmNlcy9HZW5lcmF0
ZWRTb3VyY2VzL1VYCABxmEpUcZhKVFBLAQIVAxQACAAIANJVWEWogrp1bQAAAM4AAAAxAAwAAAAA
AAAAAECkgZ0lAABfX01BQ09TWC9Tb3VyY2VzL0dlbmVyYXRlZFNvdXJjZXMvLl9SV0lQcm90b2Nv
bC5oVVgIABSRSlR8kEpUUEsBAhUDFAAIAAgA0lVYRbUxmPDcCQAAdC8AADgADAAAAAAAAAAAQKSB
eSYAAFNvdXJjZXMvR2VuZXJhdGVkU291cmNlcy9SV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oVVgIAMiRSlR8kEpUUEsBAhUDFAAIAAgA0lVYRYPCpzmoFwAAvQIBADkADAAAAAAAAAAAQKSB
yzAAAFNvdXJjZXMvR2VuZXJhdGVkU291cmNlcy9SV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbVVYCAAnkUpUfJBKVFBLAQIVAxQACAAIANJVWEWogrp1bQAAAM4AAABEAAwAAAAAAAAAAECk
gepIAABfX01BQ09TWC9Tb3VyY2VzL0dlbmVyYXRlZFNvdXJjZXMvLl9SV0lQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbVVYCAAnkUpUfJBKVFBLAQIVAxQACAAIANJVWEW4ak9uPQQAAA8LAAAz
AAwAAAAAAAAAAECkgdlJAABTb3VyY2VzL0dlbmVyYXRlZFNvdXJjZXMvUldJUHJvdG9jb2xDb25m
aWd1cmF0aW9uLmhVWAgAKpFKVHyQSlRQSwECFQMUAAgACADSVVhFqIK6dW0AAADOAAAAPgAMAAAA
AAAAAABApIGHTgAAX19NQUNPU1gvU291cmNlcy9HZW5lcmF0ZWRTb3VyY2VzLy5fUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uLmhVWAgAKpFKVHyQSlRQSwECFQMUAAgACADSVVhFHzm4EEYHAADwHwAA
NAAMAAAAAAAAAABApIFwTwAAU291cmNlcy9HZW5lcmF0ZWRTb3VyY2VzL1JXSVByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbVVYCAAtkUpUfJBKVFBLAQIVAxQACAAIANJVWEUXiiPtdAAAANEAAAA/AAwA
AAAAAAAAAECkgShXAABfX01BQ09TWC9Tb3VyY2VzL0dlbmVyYXRlZFNvdXJjZXMvLl9SV0lQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW1VWAgALZFKVHyQSlRQSwECFQMUAAgACABtVlhFz2FHMcgOAABp
cQAAOwAMAAAAAAAAAABApIEZWAAAU291cmNlcy9HZW5lcmF0ZWRTb3VyY2VzL1JXSVByb3RvY29s
RW51bUNvbnZlcnNpb25IZWxwZXJzLmhVWAgAoJFKVJ6RSlRQSwECFQMUAAgACABtVlhFn+5tynoA
AADXAAAARgAMAAAAAAAAAABApIFaZwAAX19NQUNPU1gvU291cmNlcy9HZW5lcmF0ZWRTb3VyY2Vz
Ly5fUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaFVYCACgkUpUnpFKVFBLAQIVAxQA
CAAIANJVWEW/uv72rw0AACGiAAA3AAwAAAAAAAAAAECkgVhoAABTb3VyY2VzL0dlbmVyYXRlZFNv
dXJjZXMvUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tVVgIANaRSlR8kEpUUEsBAhUDFAAI
AAgA0lVYRR9fp13/AwAA1goAAC4ADAAAAAAAAAAAQKSBfHYAAFNvdXJjZXMvR2VuZXJhdGVkU291
cmNlcy9SV0lQcm90b2NvbEludGVybmFsLmhVWAgA1pFKVHyQSlRQSwECFQMUAAgACADSVVhF6VuZ
ehopAACIPAEALAAMAAAAAAAAAABApIHnegAAU291cmNlcy9HZW5lcmF0ZWRTb3VyY2VzL1JXSVBy
b3RvY29sVHlwZXMubW1VWAgA4ZFKVHyQSlRQSwECFQMUAAgACADSVVhFwgVWO3oAAADXAAAANwAM
AAAAAAAAAABApIFrpAAAX19NQUNPU1gvU291cmNlcy9HZW5lcmF0ZWRTb3VyY2VzLy5fUldJUHJv
dG9jb2xUeXBlcy5tbVVYCADhkUpUfJBKVFBLAQIVAxQACAAIAPlVWEUZY9gJYQQAAOUJAAArAAwA
AAAAAAAAAECkgVqlAABTb3VyY2VzL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5o
VVgIAFGRSlTFkEpUUEsBAhUDFAAIAAgA+VVYRaiCunVtAAAAzgAAADYADAAAAAAAAAAAQKSBJKoA
AF9fTUFDT1NYL1NvdXJjZXMvLl9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbkhlbHBlcnMuaFVY
CABRkUpUxZBKVFBLAQIVAxQACAAIAPlVWEXwHggeswQAAIsOAAAsAAwAAAAAAAAAAECkgQWrAABT
b3VyY2VzL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5tbVVYCADQkEpUxZBKVFBL
AQIVAxQACAAIAPlVWEWogrp1bQAAAM4AAAA3AAwAAAAAAAAAAECkgSKwAABfX01BQ09TWC9Tb3Vy
Y2VzLy5fUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25IZWxwZXJzLm1tVVgIANCQSlTFkEpUUEsB
AhUDFAAIAAgA+VVYRZi/HH52AwAAxQcAAB8ADAAAAAAAAAAAQKSBBLEAAFNvdXJjZXMvUldJUHJv
dG9jb2xKU09OT2JqZWN0LmhVWAgAY5hKVMWQSlRQSwECFQMUAAgACAD5VVhFqIK6dW0AAADOAAAA
KgAMAAAAAAAAAABApIHXtAAAX19NQUNPU1gvU291cmNlcy8uX1JXSVByb3RvY29sSlNPTk9iamVj
dC5oVVgIAGOYSlTFkEpUUEsBAhUDFAAIAAgA+VVYRXLN5yYGBQAA+A4AACAADAAAAAAAAAAAQKSB
rLUAAFNvdXJjZXMvUldJUHJvdG9jb2xKU09OT2JqZWN0Lm1tVVgIAGSYSlTFkEpUUEsBAhUDFAAI
AAgA+VVYRaiCunVtAAAAzgAAACsADAAAAAAAAAAAQKSBELsAAF9fTUFDT1NYL1NvdXJjZXMvLl9S
V0lQcm90b2NvbEpTT05PYmplY3QubW1VWAgAZJhKVMWQSlRQSwECFQMUAAgACAD5VVhFUBeh5HoD
AAAaBwAAJwAMAAAAAAAAAABApIHmuwAAU291cmNlcy9SV0lQcm90b2NvbEpTT05PYmplY3RJbnRl
cm5hbC5oVVgIAGeYSlTFkEpUUEsBAhUDFAAIAAgA+VVYRaiCunVtAAAAzgAAADIADAAAAAAAAAAA
QKSBxb8AAF9fTUFDT1NYL1NvdXJjZXMvLl9SV0lQcm90b2NvbEpTT05PYmplY3RJbnRlcm5hbC5o
VVgIAGeYSlTFkEpUUEsFBgAAAAAgACAAtAwAAKLAAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240692</attachid>
            <date>2014-10-30 13:39:00 -0700</date>
            <delta_ts>2014-10-30 15:09:05 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>fix-review-comments.patch</filename>
            <type>text/plain</type>
            <size>449170</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGQ5MDMwMGE5Li4zNzdjYWU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMjEgQEAKKzIwMTQtMTAtMzAgIEpvc2VwaCBQZWNv
cmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBHZW5l
cmF0ZSBPYmpDIGluc3BlY3RvciBwcm90b2NvbCB0eXBlcyBhbmQgYWx0ZXJuYXRlIGRpc3BhdGNo
ZXIgaW50ZXJmYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM4MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gQnVyZy4KKworICAgICAg
ICBHZW5lcmF0ZSBPYmplY3RpdmUtQyBpbnRlcmZhY2VzIGZvciBpbnNwZWN0b3IgcHJvdG9jb2wg
dHlwZXMsIGNvbW1hbmQsIGFuZCBldmVudCBkaXNwYXRjaGVycy4KKyAgICAgICAgVGhpcyBpcyB2
ZXJ5IG11Y2ggbGlrZSB0aGUgSW5zcGVjdG9yUHJvdG9jb2xUeXBlcywgQmFja2VuZERpc3BhdGNo
ZXJzLCBhbmQgRnJvbnRlbmREaXNwYXRjaGVycywKKyAgICAgICAgYnV0IHdpdGggYW4gT2JqQyBz
cGluIG9uIHRoaW5ncy4KKworICAgICAgICBUaGUgcHJpdmF0ZSBBUEkgdGhhdCBjbGllbnRzIHdv
dWxkIHVzZSBpcyBhbGwgZW5jYXBzdWxhdGVkIGluIFJXSVByb3RvY29sLmguIEl0IGluY2x1ZGVz
IHRoZQorICAgICAgICB0eXBlcyBpbnRlcmZhY2VzLCBjb21tYW5kIGhhbmRsZXIgcHJvdG9jb2ws
IGFuZCBldmVudCBkaXNwYXRjaGVyIGludGVyZmFjZS4gV2hlcmUgcG9zc2libGUgdGhlCisgICAg
ICAgIEFQSSB1c2VzIHJlYWwgZW51bXMsIHdoaWNoIGhpZGVzIHRoZSByYXcgcHJvdG9jb2wgZW51
bSBzdHJpbmdzIGZyb20gY2xpZW50cy4KKworICAgICAgICBJbnNwZWN0b3IgcHJvdG9jb2wgdHlw
ZXMgYXJlLCBsaWtlIEluc3BlY3RvclByb3RvY29sT2JqZWN0cywgYnVpbHQgb24gdG9wIG9mIGFu
IEluc3BlY3Rvck9iamVjdC4KKyAgICAgICAgVGhpcyBvZmZlcnMgdGhlIGZsZXhpYmlsdHkgb2Yg
YWRkaW5nIGFyYml0cmFyeSBrZXkvdmFsdWVzIHVzaW5nIHRoZSBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKKyAgICAgICAgaW50ZXJmYWNlLCB3aGljaCBtYXkgYmUgcmVxdWlyZWQgZm9yIGNlcnRhaW4g
cHJvdG9jb2wgb2JqZWN0cyBsaWtlICJOZXR3b3JrLkhlYWRlcnMiIHdoaWNoCisgICAgICAgIGhh
dmUgbm8gZmllbGRzLCBidXQgZXhwZWN0IGFyYml0cmFyeSBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVk
LgorCisgICAgICAgIENvbW1hbmQgaGFuZGxlciBwcm90b2NvbHMgYWx3YXlzIGhhdmUgdHdvIGNh
bGxiYWNrcy4gQW4gZXJyb3IgY2FsbGJhY2sgYW5kIGEgc3VjY2VzcyBjYWxsYmFjay4KKyAgICAg
ICAgVGhlIHNpZ25hdHVyZSBpcyB2ZXJ5IG11Y2ggbGlrZSBCYWNrZW5kRGlzcGF0Y2hlcnMuIElu
IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkaXJlY3RseSB0bworICAgICAgICB0aGUgc2VsZWN0b3Jz
LCBhbmQgb3V0IHBhcmFtZXRlcnMgYXJlIGRlZmluZWQgYnkgdGhlIHN1Y2Nlc3MgY2FsbGJhY2su
IEl0IHdpbGwgYmUgdGhlIGNsaWVudCdzCisgICAgICAgIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGwg
ZWl0aGVyIG9mIHRoZXNlIGNhbGxiYWNrcyB0byBjb21wbGV0ZSBoYW5kbGluZyBvZiBhIHJlcXVl
c3QuCisKKyAgICAgICAgRXZlbnQgZGlzcGF0Y2hlciBpbnRlcmZhY2VzIGFyZSBzdHJhaWdodCBm
b3J3YXJkLCBqdXN0IHBhY2thZ2luZyB1cCB0aGUgYXJndW1lbnRzIGFuZCBzZW5kaW5nCisgICAg
ICAgIHRoZSBtZXNzYWdlIHRvIHRoZSBmcm9udGVuZC4KKworICAgICAgICBPYmpDIDwtPiBQcm90
b2NvbCBjb252ZXJzaW9uIGhhcHBlbnMgaW4gZWFjaCBvZiB0aGUgZ2VuZXJhdGVkIGZpbGVzLiBJ
biB0eXBlIGdldHRlcnMgLyBzZXR0ZXJzLAorICAgICAgICBpbiBjb21tYW5kcyBwYXJhbWV0ZXJz
IGFuZCBldmVudCBwYXJhbWV0ZXJzLiBGb3IgdGhpcyB0byB3b3JrIHdlIGdlbmVyYXRlIGNvbnZl
cnNpb24gaGVscGVycworICAgICAgICBmb3IgYWxsIGVudW1zLCBPYmpDIGVudW0gPC0+IHByb3Rv
Y29sIHN0cmluZ3MuIEZvciBOU0FycmF5IDwtPiBJbnNwZWN0b3JBcnJheSB0aGVyZSBhcmUgc29t
ZQorICAgICAgICBzdGF0aWMgaGVscGVycyB0byBkbyB0aGUgY29udmVyc2lvbnMuIFdlIGRvIGxv
c2Ugc29tZSB0eXBlIHNhZmV0eSBpbiB0aGVzZSBjb252ZXJzaW9ucy4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OgorICAgICAgICAoQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
X2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucy5BbHRl
cm5hdGVJbnNwZWN0b3IpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAo
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAg
ICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFu
ZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKEZyb250
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAo
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHk6IEFkZGVkLgorICAgICAgICAo
am9pbl90eXBlX2FuZF9uYW1lKToKKyAgICAgICAgKHN0cmlwX2NvbW1lbnRfbWFya2Vycyk6Cisg
ICAgICAgIChyZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKToKKyAgICAgICAgKE9iakNUeXBlQ2F0
ZWdvcnkpOgorICAgICAgICAoT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9vZl90eXBlKToKKyAg
ICAgICAgKE9iakNHZW5lcmF0b3IpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVy
X3RvX29iamNfaWRlbnRpZmllcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfaWRlbnRp
Zmllcl90b19pZGVudGlmaWVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl90eXBlc19maWx0ZXIpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRf
Z2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVz
KToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5k
X2hhbmRsZXJfZmlsdGVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRl
X2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29t
bWFuZF9oYW5kbGVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNo
b3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIuc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2Jq
Y19uYW1lX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVf
Zm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAgIChPYmpD
R2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIpOgor
ICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19l
bnVtKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2Rv
bWFpbik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfYWNjZXNzb3JfdHlwZV9mb3JfcmF3
X25hbWUpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3Jhd19uYW1lKToK
KyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfcmF3X25hbWUpOgorICAgICAg
ICAoT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl9yYXdfbmFtZSk6CisgICAgICAgIChP
YmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUpOgorICAgICAgICAoT2JqQ0dlbmVy
YXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19h
Y2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX2Fj
Y2Vzc29yX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9y
Lm9iamNfdHlwZV9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY190eXBl
X2Zvcl9tZW1iZXJfaW50ZXJuYWwpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVf
Zm9yX3BhcmFtKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbV9p
bnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4
cHJlc3Npb25fZm9yX3ZhcmlhYmxlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19wcm90
b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0
b3Iub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfcGFyYW1ldGVyKToKKyAgICAg
ICAgKE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFy
aWFibGUpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX3RvX3Byb3RvY29sX2V4cHJlc3Np
b25fZm9yX21lbWJlcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLnByb3RvY29sX3RvX29iamNf
ZXhwcmVzc2lvbl9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19zZXR0
ZXJfbWV0aG9kX2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRl
cl9tZXRob2RfZm9yX21lbWJlcl9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2Jq
Y19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weTogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkuCisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IpOgorICAgICAgICAoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
Lm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmplY3RpdmVD
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAg
ICAgKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVf
b2JqY19mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlv
bnNfZm9yX2RvbWFpbnMpOgorICAgICAgICAoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2Vu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKE9iamVjdGl2
ZUNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOgorICAgICAgICAoT2JqZWN0
aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAg
ICAgIChPYmplY3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1
dF9maWxlbmFtZSk6CisgICAgICAgIChPYmplY3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqZWN0aXZlQ0Nv
bmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAg
ICAgICAoT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKE9iamVj
dGl2ZUNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqZWN0aXZlQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19m
b3JfY29tbWFuZCk6CisgICAgICAgIChPYmplY3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3JfY29tbWFuZCk6CisgICAgICAg
IChPYmplY3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5OiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weS4KKyAgICAgICAg
KE9iamVjdGl2ZUNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9iamVj
dGl2ZUNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAg
ICAgIChPYmplY3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRw
dXQpOgorICAgICAgICAoT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuX2dl
bmVyYXRlX2NvbmZpZ3VyYXRpb25faW50ZXJmYWNlX2Zvcl9kb21haW5zKToKKyAgICAgICAgKE9i
amVjdGl2ZUNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9wcm9wZXJ0aWVz
X2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisg
ICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cik6CisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoT2JqZWN0
aXZlQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21h
aW5zKToKKyAgICAgICAgKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9pdmFycyk6CisgICAgICAgIChPYmplY3RpdmVDQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGVhbGxvYyk6CisgICAg
ICAgIChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfaGFuZGxlcl9zZXR0ZXJfZm9yX2RvbWFpbik6CisgICAgICAgIChPYmplY3RpdmVD
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRf
ZGlzcGF0Y2hlcl9nZXR0ZXJfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHk6IEFk
ZGVkLgorICAgICAgICAoYWRkX3doaXRlc3BhY2Vfc2VwYXJhdG9yKToKKyAgICAgICAgKE9iamVj
dGl2ZUNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvcik6CisgICAgICAgIChPYmplY3RpdmVDQ29u
dmVyc2lvbkhlbHBlcnNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoT2JqZWN0aXZlQ0Nv
bnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmpl
Y3RpdmVDQ29udmVyc2lvbkhlbHBlcnNHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6Cisg
ICAgICAgIChPYmplY3RpdmVDQ29udmVyc2lvbkhlbHBlcnNHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKE9iamVjdGl2ZUNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fZ2Vu
ZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucyk6CisgICAgICAgIChPYmplY3RpdmVDQ29u
dmVyc2lvbkhlbHBlcnNHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNp
b25fZm9yX2RlY2xhcmF0aW9uKToKKyAgICAgICAgKE9iamVjdGl2ZUNDb252ZXJzaW9uSGVscGVy
c0dlbmVyYXRvci5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVy
KToKKyAgICAgICAgKE9iamVjdGl2ZUNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKToKKyAgICAgICAgKE9i
amVjdGl2ZUNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9vYmpjX3Rv
X3Byb3RvY29sX3N0cmluZyk6CisgICAgICAgIChPYmplY3RpdmVDQ29udmVyc2lvbkhlbHBlcnNH
ZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2NvbF9zdHJpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisgICAgICAgIChPYmplY3RpdmVD
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOgorICAgICAgICAoT2Jq
ZWN0aXZlQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9f
KToKKyAgICAgICAgKE9iamVjdGl2ZUNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoT2JqZWN0aXZlQ0Zyb250ZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAg
ICAgICAoT2JqZWN0aXZlQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
LmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmplY3RpdmVDRnJvbnRlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb25zKToKKyAgICAgICAgKE9iamVjdGl2ZUNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnQpOgorICAgICAgICAoT2JqZWN0aXZlQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9z
aWduYXR1cmUpOgorICAgICAgICAoT2JqZWN0aXZlQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIu
cHk6IEFkZGVkLgorICAgICAgICAoYWRkX3doaXRlc3BhY2Vfc2VwYXJhdG9yKToKKyAgICAgICAg
KE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IpOgorICAgICAgICAoT2JqZWN0aXZlQ0hlYWRlckdl
bmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yLm91
dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yLmdlbmVy
YXRlX291dHB1dCk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9lbnVtcyk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9y
Ll9nZW5lcmF0ZV90eXBlcyk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24pOgorICAgICAgICAoT2JqZWN0
aXZlQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcik6
CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9mb3JfcGFyYW1ldGVyKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3Iu
X2dlbmVyYXRlX2VudW0pOgorICAgICAgICAoT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRvci5fZ2Vu
ZXJhdGVfZW51bS5OU19FTlVNKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3Iu
X2dlbmVyYXRlX3R5cGVfaW50ZXJmYWNlKToKKyAgICAgICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKToKKyAgICAg
ICAgKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eSk6
CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb21tYW5kX3By
b3RvY29scyk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9z
aW5nbGVfY29tbWFuZF9wcm90b2NvbCk6CisgICAgICAgIChPYmplY3RpdmVDSGVhZGVyR2VuZXJh
dG9yLl9jYWxsYmFja19ibG9ja19mb3JfY29tbWFuZCk6CisgICAgICAgIChPYmplY3RpdmVDSGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzKToKKyAgICAgICAgKE9iamVj
dGl2ZUNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2UpOgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2Nf
aW50ZXJuYWxfaGVhZGVyLnB5OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weS4KKyAgICAgICAgKE9iamVjdGl2ZUNUeXBlc0ludGVybmFsSGVhZGVyR2Vu
ZXJhdG9yKToKKyAgICAgICAgKE9iamVjdGl2ZUNUeXBlc0ludGVybmFsSGVhZGVyR2VuZXJhdG9y
Lm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmplY3RpdmVDVHlwZXNJbnRlcm5hbEhlYWRl
ckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqZWN0aXZlQ1R5cGVzSW50
ZXJuYWxIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9p
bnRlcmZhY2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKGFk
ZF93aGl0ZXNwYWNlX3NlcGFyYXRvcik6CisgICAgICAgIChPYmplY3RpdmVDVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChPYmplY3RpdmVDVHlwZXNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmplY3RpdmVDVHlwZXNJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoT2JqZWN0aXZlQ1R5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChP
YmplY3RpdmVDVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgor
ICAgICAgICAoT2JqZWN0aXZlQ1R5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVf
dHlwZV9pbXBsZW1lbnRhdGlvbnMpOgorICAgICAgICAoT2JqZWN0aXZlQ1R5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChP
YmplY3RpdmVDVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaW5pdF9tZXRo
b2RfZm9yX3JlcXVpcmVkX21lbWJlcnMpOgorICAgICAgICAoT2JqZWN0aXZlQ1R5cGVzSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKToKKyAgICAgICAg
KE9iamVjdGl2ZUNUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9nZXR0ZXJf
Zm9yX21lbWJlcik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHk6CisgICAgICAgIChQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChfZ2Vu
ZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbik6CisgICAgICAgIChfZ2VuZXJhdGVfYnVpbGRlcnNf
Zm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
b3IucHk6CisgICAgICAgIChHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4pOgor
ICAgICAgICAoR2VuZXJhdG9yKToKKyAgICAgICAgKEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQp
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weToKKyAgICAgICAgKEFsdGVybmF0ZUluc3BlY3Rvcik6CisgICAgICAgIChPYmpDSW5zcGVj
dG9yKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weToKKyAg
ICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToKKyAgICAgICAgKEZyYW1ld29ya3MpOgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbik6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQ6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0OgorCiAyMDE0LTEwLTMw
ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
IGFzc2VydGlvbiBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI4ZTBlMGUu
LjhkMjJhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTg4LDkgKzExODgs
MTggQEAKIAkJQTVFQTcwRTcxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTVFQTcwRTQxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUE1RUE3MEU4MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1RUE3MEU1MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3
MEU2MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MEVCMTlG
NUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5ICovOyB9OwogCQlBNUVBNzBFQzE5RjVCM0VBMDA5OEY1RUMgLyog
Z2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBFQTE5RjVCM0Q1MDA5
OEY1RUMgLyogZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTVFQTcw
RUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEVEMTlGNUI1
QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMDMxOUY2REU2RjAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBF
RjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlBNUVBNzEwNDE5RjZERTcyMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2Nf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjAxOUY2REU1QTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEw
NTE5RjZERTc0MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9o
ZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJh
dGlvbl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQTVFQTcxMDYxOUY2REU3NjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9j
X2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwNzE5RjZERTc4
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjMxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5w
eSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVB
NzEwODE5RjZERTdBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY0MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpl
Y3RpdmVfY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3MTA5MTlGNkRFN0Mw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNjE5RjZERTVBMDA5OEY1RUMgLyog
Z2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3MTBCMTlGNkRFODAwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY3MTlGNkRFNUEw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEw
QzE5RjZERTgyMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGODE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTVFQTcxMEUxOUY2REY4MTAwOThGNUVDIC8qIEluc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcxMEQxOUY2REY4MTAwOThGNUVDIC8qIEluc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1RkQwMDY3MTg5QUZFOUMwMDYzMzIzMSAvKiBT
Y3JpcHRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVGRDAwNjUxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5jcHAg
Ki87IH07CiAJCUE1RkQwMDY4MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RkQwMDY2MTg5
QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTU2NSw4ICsxNTc0LDYgQEAKIAkJQzQ3MDND
RDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dG9yLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3
MDNDQ0IxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEg
LyogbW9kZWxzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDNDlGRTRBOTE5QUFDODNFMDBGNDBD
RTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBNzE5QUFDODNFMDBGNDBDRTkg
LyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovOyB9OwotCQlDNDlGRTRBQTE5
QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0OUZF
NEE4MTlBQUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weSAqLzsgfTsKIAkJQzQ5RkU0QUIxOUFBQzg2MTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3By
b3RvY29sX3R5cGVzX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM0OUZFNEE3MTlBQUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQzQ5RkU0QUMxOUFBQzg2MTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29s
X3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzQ5RkU0QTgxOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yODY2LDYgKzI4NzMsMTYgQEAKIAkJQTVFQTcwRTYxOUY1QjEwMTAwOThGNUVDIC8qIEFs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1RUE3MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsg
cGF0aCA9IGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUVBNzBFRDE5RjVCNUM0MDA5OEY1RUMgLyog
SlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE1RUE3MEVGMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3Rp
dmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjAxOUY2REU1QTAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRl
X29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9o
ZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEYyMTlGNkRFNUEw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0
aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjMxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVj
dGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhv
bjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNUVBNzBGNjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJu
YWxfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBNUVBNzBGNzE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2Nf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBh
dGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5weTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjgxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamVjdGl2ZV9jLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0g
Z2VuZXJhdGVfb2JqZWN0aXZlX2MucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1
RUE3MTBEMTlGNkRGODEwMDk4RjVFQyAvKiBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1
RkQwMDY1MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0QXJndW1lbnRzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVGRDAwNjYxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFy
Z3VtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRBcmd1bWVu
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNzIsNiArNTI4OSwxNiBAQAog
CQkJCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCiAJCQkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAogCQkJCUM0NzAzQ0M3
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5ICovLAorCQkJCUE1RUE3MEVGMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAorCQkJCUE1RUE3MEYw
MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5ICovLAorCQkJCUE1
RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0
aW9uX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi8sCisJCQkJQTVF
QTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQTVFQTcwRjUxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSAqLywKKwkJCQlBNUVBNzBGNjE5
RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5
ICovLAorCQkJCUE1RUE3MEY3MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVf
Y190eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlBNUVBNzBGODE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgKi8sCiAJCQkJQzQ5RkU0QTcxOUFBQzgzRTAw
RjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSAqLywKIAkJCQlDNDlG
RTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkgKi8sCiAJCQkJQzQ3MDNDQ0ExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90
ZW1wbGF0ZXMucHkgKi8sCkBAIC01MzQxLDE0ICs1MzY4LDI0IEBACiAJCQkJQTUzMjQzOTQxODU2
OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJQTU4NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBI
ZWFkZXJzICovLAogCQkJCUM0NzAzQ0QyMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVF
QTcxMDQxOUY2REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0QxMTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBp
biBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMDUxOUY2REU3NDAwOThGNUVD
IC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRl
cnMgKi8sCisJCQkJQTVFQTcxMDYxOUY2REU3NjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlB
NUVBNzEwNzE5RjZERTc4MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lv
bl9oZWxwZXJzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMDgxOUY2REU3QTAwOThGNUVD
IC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwQTE5RjZERTdFMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJ
QTVFQTcxMEIxOUY2REU4MDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMEMxOUY2REU4MjAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcx
MDkxOUY2REU3QzAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSBpbiBI
ZWFkZXJzICovLAogCQkJCUM0NzAzQ0Q2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkg
aW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NDRjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Mw
MTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NEMDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzQ3MDNDQ0UxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxz
LnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMDMxOUY2REU2RjAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAq
LywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0
aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBF
QkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNjM4NSwx
MCArNjQyMiw3IEBACiAJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCUM0OUZFNEE5MTlBQUM4
M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgaW4gUmVzb3Vy
Y2VzICovLAotCQkJCUE1RUE3MEVCMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5h
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJQTUz
RjFBQzAxOEM5MEY4RjAwNzJFQjZEIC8qIGZyYW1ld29yay5zYiBpbiBSZXNvdXJjZXMgKi8sCi0J
CQkJQzQ5RkU0QUExOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkKaW5k
ZXggODg5ZTI5Zi4uZTljNjdiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkKQEAgLTksNSArOSwx
NCBAQCBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKIGZy
b20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCiBm
cm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCiBmcm9tIGdl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20g
Z2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgor
ZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9oZWFk
ZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9u
X2hlbHBlcnMgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVh
ZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0
aW9uIGltcG9ydCAqCiBmcm9tIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlciBpbXBvcnQg
KgogZnJvbSBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAwYWY2M2QzLi5hNzZhMjBj
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtNzUsNyArNzUsNyBA
QCBjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0
b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFu
ZF9kZWNsYXJhdGlvbnMpLAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJh
dGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVz
LkFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURl
Y2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToK
ICAgICAgICAgbGluZXMgPSBbXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZDgyMTgzMC4uOWEwOGU2
MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAg
ICAgICAgbGluZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpJykKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdj
bGFzcyBBbHRlcm5hdGVJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVyOycgJSBkb21haW4uZG9t
YWluX25hbWUpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9kb21haW4oZG9tYWluLCAnY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yJXNCYWNrZW5kRGlz
cGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIApAQCAtMTA0LDcgKzEwNCw3IEBAIGNsYXNzIEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICAn
Y29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3Mp
KQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4s
IFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJE
ZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYg
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBj
b21tYW5kKToKICAgICAgICAgZW51bV9hcmdzID0gewpAQCAtMTk0LDcgKzE5NCw3IEBAIGNsYXNz
IEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAg
ICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihkZWNsYXJhdGlvbnMpCiAgICAgICAg
IH0KIAotICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWlu
RGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkK
KyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBU
ZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVy
RGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1h
bmQpOgogICAgICAgICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1l
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggOTdjN2NmZS4uOWJlYzU1NyAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtNzgsNyArNzgsNyBAQCBjbGFz
cyBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZQogICAgICAgICB9CiAg
ICAgICAgIGRlc3RydWN0b3IgPSAnSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5JbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpIHsgfScgJSBkZXN0cnVjdG9yX2FyZ3MKLSAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIGRlc3RydWN0b3IpCisgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgZGVzdHJ1Y3RvcikK
IAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgogICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQpAQCAtOTgsNyAr
OTgsNyBAQCBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdl
bmVyYXRvcik6CiAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oY29tbWFuZCwgZG9tYWlu
KSkKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCBkb21haW4pKQogCi0g
ICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCAiXG5cbiIuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGltcGxlbWVudGF0aW9u
cykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVu
dGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgY2FzZXMgPSBbXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCBhYjIxOGRiLi43M2ZmN2IwIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eQpAQCAtMTAyLDcgKzEwMiw3IEBAIGNsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5q
b2luKGV2ZW50X2RlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBHZW5l
cmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0
ZXMuRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuRnJvbnRlbmREaXNw
YXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9m
b3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbiwgdXNlZF9lbnVtX25hbWVzKToKICAgICAgICAg
Zm9ybWFsX3BhcmFtZXRlcnMgPSBbXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
aW5kZXggNzFkMWM5ZC4uMGQ1NTE4MyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5CkBAIC02OCw3ICs2OCw3IEBAIGNsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZl
bnRzOgogICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluKSkKIAotICAg
ICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwg
IlxuXG4iLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVu
dChzZWxmLCBldmVudCwgZG9tYWluKToKICAgICAgICAgbGluZXMgPSBbXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqZWN0aXZlX2MucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfYy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi4wYTgwMzkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkKQEAg
LTAsMCArMSw0OTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBl
LCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3Jr
cworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgam9pbl90eXBl
X2FuZF9uYW1lKHR5cGVfc3RyLCBuYW1lX3N0cik6CisgICAgaWYgdHlwZV9zdHIuZW5kc3dpdGgo
JyonKToKKyAgICAgICAgcmV0dXJuIHR5cGVfc3RyICsgbmFtZV9zdHIKKyAgICByZXR1cm4gdHlw
ZV9zdHIgKyAnICcgKyBuYW1lX3N0cgorCisKK2RlZiBzdHJpcF9ibG9ja19jb21tZW50X21hcmtl
cnMoc3RyKToKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UoJy8qJywgJycpLnJlcGxhY2UoJyovJywg
JycpCisKKworZGVmIHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIoc3RyLCBwb3NzaWJsZV9kdXBs
aWNhdGUpOgorICAgIHJldHVybiBzdHIucmVwbGFjZShwb3NzaWJsZV9kdXBsaWNhdGUgKyBwb3Nz
aWJsZV9kdXBsaWNhdGUsIHBvc3NpYmxlX2R1cGxpY2F0ZSkKKworCitfT0JKQ19JREVOVElGSUVS
X1JFTkFNRV9NQVAgPSB7CisgICAgJ3RoaXMnOiAndGhpc09iamVjdCcsICAjIERlYnVnZ2VyLkNh
bGxGcmFtZS50aGlzCisgICAgJ2Rlc2NyaXB0aW9uJzogJ3N0cmluZ1JlcHJlc2VudGF0aW9uJywg
ICMgUnVudGltZS5SZW1vdGVPYmplY3QuZGVzY3JpcHRpb24KKyAgICAnaWQnOiAnaWRlbnRpZmll
cicsICAjIFBhZ2UuRnJhbWUuaWQsIFJ1bnRpbWUuRXhlY3V0aW9uQ29udGV4dERlc2NyaXB0aW9u
LmlkLCBEZWJ1Z2dlci5CcmVha3BvaW50QWN0aW9uLmlkCit9CisKK19PQkpDX0lERU5USUZJRVJf
UkVWRVJTRV9SRU5BTUVfTUFQID0gZGljdCgodiwgaykgZm9yIGssIHYgaW4gX09CSkNfSURFTlRJ
RklFUl9SRU5BTUVfTUFQLml0ZXJpdGVtcygpKQorCisKK2NsYXNzIE9iakNUeXBlQ2F0ZWdvcnk6
CisgICAgU2ltcGxlID0gMAorICAgIFN0cmluZyA9IDEKKyAgICBPYmplY3QgPSAyCisgICAgQXJy
YXkgPSAzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNhdGVnb3J5X2Zvcl90eXBlKF90
eXBlKToKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAg
ICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ3N0cmluZyc6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nCisgICAgICAgICAgICBpZiAgX3R5cGUu
cmF3X25hbWUoKSBpbiBbJ29iamVjdCcsICdhbnknXToKKyAgICAgICAgICAgICAgICByZXR1cm4g
T2JqQ1R5cGVDYXRlZ29yeS5PYmplY3QKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkg
aXMgJ2FycmF5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5BcnJh
eQorICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlCisgICAgICAgIGlm
IChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2Jq
Q1R5cGVDYXRlZ29yeS5PYmplY3QKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXkKKyAgICAg
ICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICByZXR1
cm4gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUp
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZl
X3R5cGUpCisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgT2JqQ0dlbmVyYXRvcjoKKyAg
ICBPQkpDX1BSRUZJWCA9ICdSV0lQcm90b2NvbCcKKyAgICBPQkpDX0pTT05fT0JKRUNUX0JBU0Ug
PSAnJXNKU09OT2JqZWN0JyAlIE9CSkNfUFJFRklYCisKKyAgICAjIEFkanVzdCBpZGVudGlmaWVy
IG5hbWVzIHRoYXQgY29sbGlkZSB3aXRoIE9iakMga2V5d29yZHMuCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIGlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG5hbWUpOgorICAgICAg
ICByZXR1cm4gX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQLmdldChuYW1lLCBuYW1lKQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2lkZW50aWZpZXJfdG9faWRlbnRpZmllcihu
YW1lKToKKyAgICAgICAgcmV0dXJuIF9PQkpDX0lERU5USUZJRVJfUkVWRVJTRV9SRU5BTUVfTUFQ
LmdldChuYW1lLCBuYW1lKQorCisgICAgIyBHZW5lcmF0ZSBPYmpDIHR5cGVzLCBjb21tYW5kIGhh
bmRsZXJzLCBhbmQgZXZlbnQgZGlzcGF0Y2hlcnMgZm9yIGEgc3Vic2V0IG9mIGRvbWFpbnMuCisK
KyAgICBET01BSU5TX1RPX0dFTkVSQVRFID0gWydDU1MnLCAnRE9NJywgJ0RPTVN0b3JhZ2UnLCAn
TmV0d29yaycsICdQYWdlJ10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX2dl
bmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIobW9kZWwpOgorICAgICAgICBkZWYgc2hvdWxkX2dl
bmVyYXRlX2RvbWFpbl90eXBlcyhkb21haW4pOgorICAgICAgICAgICAgaWYgbW9kZWwuZnJhbWV3
b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAg
ICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFU
RSkKKyAgICAgICAgICAgIHdoaXRlbGlzdC51cGRhdGUoc2V0KFsnQ29uc29sZScsICdEZWJ1Z2dl
cicsICdSdW50aW1lJ10pKQorICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBp
biB3aGl0ZWxpc3QKKyAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXMK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21t
YW5kX2hhbmRsZXJfZmlsdGVyKG1vZGVsKToKKyAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9k
b21haW5fY29tbWFuZF9oYW5kbGVyKGRvbWFpbik6CisgICAgICAgICAgICBpZiBtb2RlbC5mcmFt
ZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisg
ICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5TX1RPX0dFTkVS
QVRFKQorICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QK
KyAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRf
ZGlzcGF0Y2hlcl9maWx0ZXIobW9kZWwpOgorICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl9ldmVudF9kaXNwYXRjaGVyKGRvbWFpbik6CisgICAgICAgICAgICBpZiBtb2RlbC5mcmFt
ZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisg
ICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5TX1RPX0dFTkVS
QVRFKQorICAgICAgICAgICAgd2hpdGVsaXN0LmFkZCgnQ29uc29sZScpCisgICAgICAgICAgICBy
ZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1lIGluIHdoaXRlbGlzdAorICAgICAgICByZXR1cm4gc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyCisKKyAgICAjIE9iakMgZW51bSBh
bmQgdHlwZSBuYW1lcy4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19uYW1lX2Zv
cl90eXBlKHR5cGUpOgorICAgICAgICBuYW1lID0gdHlwZS5xdWFsaWZpZWRfbmFtZSgpLnJlcGxh
Y2UoJy4nLCAnJykKKyAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIobmFt
ZSwgdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gJyVzJXMn
ICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIG9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihk
ZWNsYXJhdGlvbik6CisgICAgICAgIGRvbWFpbl9uYW1lID0gZGVjbGFyYXRpb24udHlwZS50eXBl
X2RvbWFpbigpLmRvbWFpbl9uYW1lCisgICAgICAgIG5hbWUgPSAnJXMlcycgJSAoZG9tYWluX25h
bWUsIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSkKKyAgICAgICAgbmFtZSA9IHJlbW92ZV9k
dXBsaWNhdGVfZnJvbV9zdHIobmFtZSwgZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiAnJXMl
cycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgb2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihkZWNs
YXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgZG9tYWluX25hbWUgPSBtZW1iZXIudHlwZS50eXBl
X2RvbWFpbigpLmRvbWFpbl9uYW1lCisgICAgICAgIG5hbWUgPSAnJXMlcyVzJyAlIChkb21haW5f
bmFtZSwgZGVjbGFyYXRpb24udHlwZS5yYXdfbmFtZSgpLCB1Y2ZpcnN0KG1lbWJlci5tZW1iZXJf
bmFtZSkpCisgICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIGRv
bWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19Q
UkVGSVgsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfZW51bV9uYW1l
X2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25h
bWUsIHBhcmFtZXRlcik6CisgICAgICAgIGRvbWFpbl9uYW1lID0gZG9tYWluLmRvbWFpbl9uYW1l
CisgICAgICAgIG5hbWUgPSAnJXMlcyVzJyAlIChkb21haW5fbmFtZSwgdWNmaXJzdChldmVudF9v
cl9jb21tYW5kX25hbWUpLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAg
ICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIGRvbWFpbl9uYW1lKQor
ICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUp
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5v
bnltb3VzX2VudW0oX3R5cGUpOgorICAgICAgICBkb21haW5fbmFtZSA9IF90eXBlLnR5cGVfZG9t
YWluKCkuZG9tYWluX25hbWUKKyAgICAgICAgbmFtZSA9IF90eXBlLnF1YWxpZmllZF9uYW1lKCku
cmVwbGFjZSgnLicsICcnKQorICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0
cihuYW1lLCBkb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJh
dG9yLk9CSkNfUFJFRklYLCBuYW1lKQorCisgICAgIyBNaXNjZWxsYW5lb3VzIG5hbWUgaGFuZGxp
bmcuCisgICAgCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB2YXJpYWJsZV9uYW1lX3ByZWZp
eF9mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAgIGRvbWFpbl9uYW1lID0gZG9tYWluLmRvbWFp
bl9uYW1lCisgICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0RPTScpOgorICAgICAg
ICAgICAgcmV0dXJuICdkb20nICsgZG9tYWluX25hbWVbMzpdCisgICAgICAgIGlmIGRvbWFpbl9u
YW1lLnN0YXJ0c3dpdGgoJ0NTUycpOgorICAgICAgICAgICAgcmV0dXJuICdjc3MnICsgZG9tYWlu
X25hbWVbMzpdCisgICAgICAgIHJldHVybiBkb21haW5fbmFtZVs6MV0ubG93ZXIoKSArIGRvbWFp
bl9uYW1lWzE6XQorCisgICAgIyBUeXBlIGJhc2ljcy4KKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9yYXdfbmFtZShyYXdfbmFtZSk6CisgICAgICAg
IGlmIHJhd19uYW1lIGluIFsnc3RyaW5nJywgJ2FycmF5J106CisgICAgICAgICAgICByZXR1cm4g
J2NvcHknCisgICAgICAgIGlmIHJhd19uYW1lIGluIFsnaW50ZWdlcicsICdudW1iZXInLCAnYm9v
bGVhbiddOgorICAgICAgICAgICAgcmV0dXJuICdhc3NpZ24nCisgICAgICAgIGlmIHJhd19uYW1l
IGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgcmV0dXJuICdyZXRhaW4nCisgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfdHlwZV9m
b3JfcmF3X25hbWUocmF3X25hbWUpOgorICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoK
KyAgICAgICAgICAgIHJldHVybiAnTlNTdHJpbmcgKicKKyAgICAgICAgaWYgcmF3X25hbWUgaXMg
J2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheSAqJworICAgICAgICBpZiByYXdf
bmFtZSBpcyAnaW50ZWdlcic6CisgICAgICAgICAgICByZXR1cm4gJ05TSW50ZWdlcicKKyAgICAg
ICAgaWYgcmF3X25hbWUgaXMgJ251bWJlcic6CisgICAgICAgICAgICByZXR1cm4gJ2RvdWJsZScK
KyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2Jvb2xlYW4nOgorICAgICAgICAgICAgcmV0dXJuICdC
T09MJworICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAg
ICAgIHJldHVybiAnJXMgKicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRQor
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2Ns
YXNzX2Zvcl9yYXdfbmFtZShyYXdfbmFtZSk6CisgICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuICdOU1N0cmluZycKKyAgICAgICAgaWYgcmF3X25hbWUg
aXMgJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheScKKyAgICAgICAgaWYgcmF3
X25hbWUgaW4gWydpbnRlZ2VyJywgJ251bWJlcicsICdib29sZWFuJ106CisgICAgICAgICAgICBy
ZXR1cm4gJ05TTnVtYmVyJworICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3Qn
XToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFT
RQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBGSVhNRTogQ2FuIHRoZXNlIHByb3RvY29s
X3R5cGUgZnVuY3Rpb25zIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgQysrIGdlbmVyYXRvcnMgZnVu
Y3Rpb25zPworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm90b2NvbF90eXBlX2Zvcl9y
YXdfbmFtZShyYXdfbmFtZSk6CisgICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJpbmcnOgorICAg
ICAgICAgICAgcmV0dXJuICdTdHJpbmcnCisgICAgICAgIGlmIHJhd19uYW1lIGlzICdpbnRlZ2Vy
JzoKKyAgICAgICAgICAgIHJldHVybiAnaW50JworICAgICAgICBpZiByYXdfbmFtZSBpcyAnbnVt
YmVyJzoKKyAgICAgICAgICAgIHJldHVybiAnZG91YmxlJworICAgICAgICBpZiByYXdfbmFtZSBp
cyAnYm9vbGVhbic6CisgICAgICAgICAgICByZXR1cm4gJ2Jvb2wnCisgICAgICAgIGlmIHJhd19u
YW1lIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3JP
YmplY3QnCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IHByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90
eXBlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAg
ICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl9yYXdfbmFtZShf
dHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
KToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5
cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVz
OjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUo
KSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAg
ICAgc3ViX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUu
ZWxlbWVudF90eXBlKQorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTwlcz4nICUgc3ViX3R5cGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgb2JqY19jbGFzc19mb3JfdHlwZShfdHlwZSk6CisgICAgICAgIGlmIChp
c2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5
cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3Jh
d19uYW1lKF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19m
b3JfcmF3X25hbWUoX3R5cGUucHJpbWl0aXZlX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpD
R2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgc3ViX3R5cGUgPSBzdHJpcF9ibG9j
a19jb21tZW50X21hcmtlcnMoT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKF90eXBl
LmVsZW1lbnRfdHlwZSkpCisgICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkvKjwlcz4qLycgJSBz
dWJfdHlwZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBvYmpjX2FjY2Vzc29yX3R5cGVfZm9yX21lbWJlcihtZW1iZXIpOgorICAgICAgICByZXR1cm4g
T2JqQ0dlbmVyYXRvci5vYmpjX2FjY2Vzc29yX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChtZW1i
ZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBl
X2Zvcl9tZW1iZXJfaW50ZXJuYWwoX3R5cGUpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBl
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAg
ICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2FjY2Vzc29yX3R5cGVfZm9yX3Jhd19uYW1l
KF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSkpOgorICAgICAgICAgICAgcmV0dXJuICdhc3NpZ24nCisgICAgICAgIGlmIChpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ3JldGFpbicKKyAgICAg
ICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJu
ICdjb3B5JworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBvYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgcmV0
dXJuIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5
cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9i
amNfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToK
KyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAg
ICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgUHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2Jq
Y190eXBlX2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiAoaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAgIGlmIChfdHlwZS5pc19hbm9ueW1v
dXMpOgorICAgICAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1l
X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3Vz
X2VudW0oX3R5cGUpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5
cGUpICsgJyAqJworICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6Cisg
ICAgICAgICAgICBzdWJfdHlwZSA9IHN0cmlwX2Jsb2NrX2NvbW1lbnRfbWFya2VycyhPYmpDR2Vu
ZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiAnTlNBcnJheS8qPCVzPiovIConICUgc3ViX3R5cGUKKyAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY190eXBlX2Zvcl9wYXJhbShk
b21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyLCByZXNwZWN0X29wdGlvbmFs
PVRydWUpOgorICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3Jf
cGFyYW1faW50ZXJuYWwocGFyYW1ldGVyLnR5cGUsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9u
YW1lLCBwYXJhbWV0ZXIpCisgICAgICAgIGlmIHJlc3BlY3Rfb3B0aW9uYWwgYW5kIHBhcmFtZXRl
ci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgIGlmIG9iamNfdHlwZS5lbmRzd2l0aCgnKicpOgor
ICAgICAgICAgICAgICAgIHJldHVybiBvYmpjX3R5cGUgKyAnKicKKyAgICAgICAgICAgIHJldHVy
biBvYmpjX3R5cGUgKyAnIConCisgICAgICAgIHJldHVybiBvYmpjX3R5cGUKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgb2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbChfdHlwZSwgZG9t
YWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6CisgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5h
bGlhc2VkX3R5cGUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
KToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcmF3X25h
bWUoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKSk6CisgICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVt
X3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAg
ICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9u
eW1vdXNfZW51bShfdHlwZSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5
cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlw
ZShfdHlwZSkgKyAnIConCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUp
KToKKyAgICAgICAgICAgIHN1Yl90eXBlID0gc3RyaXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKE9i
akNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShfdHlwZS5lbGVtZW50X3R5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuICdOU0FycmF5Lyo8JXM+Ki8gKicgJSBzdWJfdHlwZQorICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgIyBPYmpDIDwtPiBQcm90b2NvbCBjb252ZXJzaW9uIGZvciBjb21t
YW5kcyBhbmQgZXZlbnRzLgorICAgICMgICAtIGNvbnZlcnQgYSBjb21tYW5kIGNhbGwgcGFyYW1l
dGVyIHJlY2VpdmVkIGZyb20gUHJvdG9jb2wgdG8gT2JqQyBmb3IgaGFuZGxlcgorICAgICMgICAt
IGNvbnZlcnQgYSBjb21tYW5kIHJldHVybiBwYXJhbWV0ZXIgaW4gY2FsbGJhY2sgYmxvY2sgZnJv
bSBPYmpDIHRvIFByb3RvY29sIHRvIHNlbmQKKyAgICAjICAgLSBjb252ZXJ0IGFuIGV2ZW50IHBh
cmFtZXRlciBmcm9tIE9iakMgQVBJIHRvIFByb3RvY29sIHRvIHNlbmQKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgb2JqY19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFi
bGUodmFyX3R5cGUsIHZhcl9uYW1lKToKKyAgICAgICAgY2F0ZWdvcnkgPSBPYmpDVHlwZUNhdGVn
b3J5LmNhdGVnb3J5X2Zvcl90eXBlKHZhcl90eXBlKQorICAgICAgICBpZiBjYXRlZ29yeSBpbiBb
T2JqQ1R5cGVDYXRlZ29yeS5TaW1wbGUsIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nXToKKyAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UodmFyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ3RvUHJvdG9jb2xTdHJpbmcoJXMpJyAlIHZhcl9uYW1lCisgICAgICAgICAgICBy
ZXR1cm4gdmFyX25hbWUKKyAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5P
YmplY3Q6CisgICAgICAgICAgICByZXR1cm4gJ1slcyB0b0luc3BlY3Rvck9iamVjdF0nICUgdmFy
X25hbWUKKyAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5BcnJheToKKyAg
ICAgICAgICAgIHByb3RvY29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9y
X3R5cGUodmFyX3R5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9i
akNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZSh2YXJfdHlwZS5lbGVtZW50X3R5cGUpCisg
ICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvclN0cmluZ0FycmF5
QXJyYXkoJXMpJyAlIHZhcl9uYW1lCisgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdT
dHJpbmcnIGFuZCBvYmpjX2NsYXNzIGlzICdOU1N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdpbnNwZWN0b3JTdHJpbmdBcnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIGlm
IHByb3RvY29sX3R5cGUgaXMgJ2ludCcgYW5kIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvckludGVnZXJBcnJheSglcyknICUgdmFyX25h
bWUKKyAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2RvdWJsZScgYW5kIG9iamNfY2xh
c3MgaXMgJ05TTnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvckRvdWJs
ZUFycmF5KCVzKScgJSB2YXJfbmFtZQorICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JPYmpl
Y3RBcnJheSglcyknICUgdmFyX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2Jq
Y19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9u
LCBtZW1iZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6
CisgICAgICAgICAgICBpZiBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5v
YmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1i
ZXIpLCBuYW1lKQorICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVz
KScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVt
KG1lbWJlci50eXBlKSwgbmFtZSkKKyAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19w
cm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUobWVtYmVyLnR5cGUsIG5hbWUp
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJl
c3Npb25fZm9yX3BhcmFtZXRlcihuYW1lLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwg
cGFyYW1ldGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5l
cmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4s
IGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgbmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19l
bnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShwYXJhbWV0ZXIudHlwZSksIG5hbWUpCisg
ICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Np
b25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZSh2
YXJfdHlwZSwgdmFyX25hbWUpOgorICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnku
Y2F0ZWdvcnlfZm9yX3R5cGUodmFyX3R5cGUpCisgICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpD
VHlwZUNhdGVnb3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgorICAgICAgICAg
ICAgcmV0dXJuIHZhcl9uYW1lCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdv
cnkuT2JqZWN0OgorICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19j
bGFzc19mb3JfdHlwZSh2YXJfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiAnW1tbJXMgYWxsb2Nd
IGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OiVzXSBhdXRvcmVsZWFzZV0nICUgKG9iamNfY2xhc3Ms
IHZhcl9uYW1lKQorICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5
OgorICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3Jf
dHlwZSh2YXJfdHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICBpZiBvYmpjX2NsYXNzIGlz
ICdOU1N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdvYmpjU3RyaW5nQXJyYXkoJXMp
JyAlIHZhcl9uYW1lCisgICAgICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU051bWJlcic6ICAj
IEZJWE1FOiBJbnRlZ2VyIG9yIERvdWJsZT8KKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNJ
bnRlZ2VyQXJyYXkoJXMpJyAlIHZhcl9uYW1lCisgICAgICAgICAgICByZXR1cm4gJ29iamNBcnJh
eTwlcz4oJXMpJyAlIChvYmpjX2NsYXNzLCB2YXJfbmFtZSkKKworICAgICMgT2JqQyA8LT4gSlNP
TiBvYmplY3QgY29udmVyc2lvbiBmb3IgdHlwZXMgZ2V0dGVycy9zZXR0ZXJzLgorICAgICMgICAt
IGNvbnZlcnQgYSBtZW1iZXIgc2V0dGVyIGZyb20gT2JqQyBBUEkgdG8gSlNPTiBvYmplY3Qgc2V0
dGVyCisgICAgIyAgIC0gY29udmVydCBhIG1lbWJlciBnZXR0ZXIgZnJvbSBKU09OIG9iamVjdCB0
byBPYmpDIEFQSQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3RvX3Byb3RvY29s
X2V4cHJlc3Npb25fZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyLCBzdWJfZXhwcmVzc2lv
bik6CisgICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlw
ZShtZW1iZXIudHlwZSkKKyAgICAgICAgaWYgY2F0ZWdvcnkgaW4gW09iakNUeXBlQ2F0ZWdvcnku
U2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZ106CisgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICd0b1By
b3RvY29sU3RyaW5nKCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgcmV0dXJuIHN1
Yl9leHByZXNzaW9uCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2Jq
ZWN0OgorICAgICAgICAgICAgcmV0dXJuIHN1Yl9leHByZXNzaW9uCisgICAgICAgIGlmIGNhdGVn
b3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6CisgICAgICAgICAgICBvYmpjX2NsYXNzID0g
T2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlw
ZSkKKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TU3RyaW5nJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ2luc3BlY3RvclN0cmluZ0FycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgor
ICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNOdW1iZXInOgorICAgICAgICAgICAgICAg
IHByb3RvY29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUobWVt
YmVyLnR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUg
aXMgJ2RvdWJsZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yRG91Ymxl
QXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNw
ZWN0b3JJbnRlZ2VyQXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCisgICAgICAgICAgICByZXR1
cm4gJ2luc3BlY3Rvck9iamVjdEFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBwcm90b2NvbF90b19vYmpjX2V4cHJlc3Npb25fZm9yX21lbWJl
cihkZWNsYXJhdGlvbiwgbWVtYmVyLCBzdWJfZXhwcmVzc2lvbik6CisgICAgICAgIGNhdGVnb3J5
ID0gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZShtZW1iZXIudHlwZSkKKyAgICAg
ICAgaWYgY2F0ZWdvcnkgaW4gW09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVn
b3J5LlN0cmluZ106CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVt
VHlwZSk6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChP
YmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlciksIHN1Yl9leHByZXNzaW9uKQorICAgICAgICAgICAgICAgIHJldHVy
biAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVt
X25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShtZW1iZXIudHlwZSksIHN1Yl9leHByZXNzaW9u
KQorICAgICAgICAgICAgcmV0dXJuIHN1Yl9leHByZXNzaW9uCisgICAgICAgIGlmIGNhdGVnb3J5
IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgorICAgICAgICAgICAgb2JqY190eXBlID0gT2Jq
Q0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAg
ICAgICAgICAgcmV0dXJuICcoJXMpJXMnICUgKG9iamNfdHlwZSwgc3ViX2V4cHJlc3Npb24pCisg
ICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6CisgICAgICAgICAg
ICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1l
bWJlci50eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2Vu
ZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBlKQorICAg
ICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNTdHJpbmcnOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnb2JqY1N0cmluZ0FycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAg
aWYgb2JqY19jbGFzcyBpcyAnTlNOdW1iZXInOgorICAgICAgICAgICAgICAgIHByb3RvY29sX3R5
cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyLnR5cGUuZWxl
bWVudF90eXBlKQorICAgICAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2RvdWJsZSc6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY0RvdWJsZUFycmF5KCVzKScgJSBzdWJf
ZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY0ludGVnZXJBcnJheSglcykn
ICUgc3ViX2V4cHJlc3Npb24KKyAgICAgICAgICAgIHJldHVybiAnb2JqY0FycmF5PCVzPiglcykn
ICUgKG9iamNfY2xhc3MsIHN1Yl9leHByZXNzaW9uKQorCisgICAgIyBKU09OIG9iamVjdCBzZXR0
ZXIvZ2V0dGVyIHNlbGVjdG9ycyBmb3IgdHlwZXMuCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIG9iamNfc2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpOgor
ICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJl
cl9pbnRlcm5hbChtZW1iZXIudHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcikKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgb2JqY19zZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwo
X3R5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBl
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAg
ICAgICByYXdfbmFtZSA9IF90eXBlLnJhd19uYW1lKCkKKyAgICAgICAgICAgIGlmIHJhd19uYW1l
IGlzICdib29sZWFuJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldEJvb2wnCisgICAgICAg
ICAgICBpZiByYXdfbmFtZSBpcyAnaW50ZWdlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdz
ZXRJbnRlZ2VyJworICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ251bWJlcic6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdzZXREb3VibGUnCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAn
c3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFN0cmluZycKKyAgICAgICAgICAg
IGlmIHJhd19uYW1lIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJldHVy
biAnc2V0T2JqZWN0JworICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2FycmF5JzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ3NldEluc3BlY3RvckFycmF5JworICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6CisgICAgICAg
ICAgICByZXR1cm4gJ3NldFN0cmluZycKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9i
amVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0JworICAgICAgICBpZiAo
aXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ3NldElu
c3BlY3RvckFycmF5JworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBvYmpjX2dldHRlcl9tZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVy
KToKKyAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9t
ZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyX2ludGVy
bmFsKF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgaWYgKGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRf
dHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgorICAg
ICAgICAgICAgcmF3X25hbWUgPSBfdHlwZS5yYXdfbmFtZSgpCisgICAgICAgICAgICBpZiByYXdf
bmFtZSBpcyAnYm9vbGVhbic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdib29sRm9yS2V5Jwor
ICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2ludGVnZXInOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnaW50ZWdlckZvcktleScKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdudW1iZXIn
OgorICAgICAgICAgICAgICAgIHJldHVybiAnZG91YmxlRm9yS2V5JworICAgICAgICAgICAgaWYg
cmF3X25hbWUgaXMgJ3N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzdHJpbmdGb3JL
ZXknCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ29iamVjdEZvcktleScKKyAgICAgICAgICAgIGlmIHJhd19uYW1l
IGlzICdhcnJheSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JBcnJheUZvcktl
eScKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdzdHJpbmdGb3JLZXknCisgICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4g
J29iamVjdEZvcktleScKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkp
OgorICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JBcnJheUZvcktleScKKyAgICAgICAgcmV0
dXJuIE5vbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpzaW1pbGFyaXR5
IGluZGV4IDYxJQpjb3B5IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKY29weSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4
IDBhZjYzZDMuLjhiYmQwZmYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKQEAgLTMwLDU0ICszMCw3MSBAQCBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgcmUKIGZyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQogCitmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jIGltcG9ydCBP
YmpDR2VuZXJhdG9yCiBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCiBmcm9tIGdlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zy
b20gbW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQogCiAKLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yKEdlbmVyYXRvcik6CitjbGFzcyBPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKToKICAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCkKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJl
dHVybiAnSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgnCisgICAgICAgIHJl
dHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
CisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZp
bHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVy
X2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcnMgPSBb
Ci0gICAgICAgICAgICAnIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCInLAotICAgICAgICAgICAg
JzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCisgICAgICAg
ICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPicsCisgICAgICAgICAgICAnPHd0Zi9SZXRhaW5QdHIuaD4nLAogICAgICAgICBdCiAKICAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiBy
ZS5zdWIoJ1xXKycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCiAgICAgICAgICAgICAn
aW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4g
aGVhZGVyc10pLAorICAgICAgICAgICAgJ2ZvcndhcmREZWNsYXJhdGlvbnMnOiBzZWxmLl9nZW5l
cmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRpb25zKCksCiAgICAgICAgIH0KIAogICAgICAgICBk
b21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKICAgICAgICAgc2VjdGlvbnMgPSBb
XQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hl
cnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJh
dGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpKSkKLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hl
YWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNl
Y3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5PYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rp
b25zKQogCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
KHNlbGYsIGRvbWFpbik6CisgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRp
b25zKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsnQHByb3RvY29sICVzJXNEb21haW5IYW5kbGVy
OycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKSBmb3Ig
ZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpXQorICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGNs
YXNzICVzJXNEb21haW5IYW5kbGVyOycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9t
YWluLmRvbWFpbl9uYW1lKSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAg
IGRlZiBfZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6CiAgICAgICAgIGlmIG5vdCBkb21haW4uY29tbWFuZHM6CiAgICAgICAgICAgICBy
ZXR1cm4gJycKIAogICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIGZv
ciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFy
YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21t
YW5kKGNvbW1hbmQpKQorICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5k
KSkKIAogICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKICAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzog
J1xuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSwKKyAgICAgICAgICAgICdvYmpjUHJlZml4
JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKICAgICAgICAgfQogCi0gICAgICAgIHJldHVy
biBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShU
ZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50
ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBs
YXRlKFRlbXBsYXRlcy5PYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyT2Jq
Q0RlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAotICAgIGRl
ZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5k
KToKKyAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFu
ZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBwYXJhbWV0ZXJz
ID0gWydsb25nIGNhbGxJZCddCiAgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2Fs
bF9wYXJhbWV0ZXJzOgpAQCAtODcsNSArMTA0LDUgQEAgY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21tYW5k
TmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAogICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAn
LCAnLmpvaW4ocGFyYW1ldGVycyksCiAgICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBj
b21tYW5kX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNv
bW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpIG92ZXJyaWRlOycgJSBjb21tYW5kX2FyZ3MpCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uMTVlOTc3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDE2NyBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgcmUKK2Zy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jIGlt
cG9ydCBPYmpDVHlwZUNhdGVnb3J5LCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUK
K2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRl
cyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1w
b3J0IEZyYW1ld29ya3MKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKwor
Y2xhc3MgT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5l
cmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgor
ICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQor
CisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICclc0JhY2tl
bmREaXNwYXRjaGVycy5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYg
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2Vu
ZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxm
Lm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRl
ZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwor
ICAgICAgICAgICAgJyIlc0ludGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgs
CisgICAgICAgICAgICAnIiVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5lcmF0
b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPicsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPicsCisgICAgICAgIF0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAg
ICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgT2Jq
Q0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6
ICdcbicuam9pbihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFy
eV9oZWFkZXJzXSksCisgICAgICAgIH0KKworICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5z
X3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5l
eHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFp
biwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
T2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25z
KQorCisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4o
c2VsZiwgZG9tYWluKToKKyAgICAgICAgaWYgbm90IGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAg
ICAgIHJldHVybiAnJworCisgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KKyAgICAg
ICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgY29tbWFuZF9k
ZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25f
Zm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSkKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGNvbW1hbmRfZGVjbGFyYXRpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxl
bWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQnXQorICAgICAgICBm
b3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoJyVzIGluXyVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3Vu
Y2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFp
bk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBj
b21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2lu
KHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3N1Y2Nlc3NDYWxsYmFjayc6IHNlbGYuX2dlbmVy
YXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSwKKyAgICAgICAg
ICAgICdjb252ZXJzaW9ucyc6IHNlbGYuX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5k
KGRvbWFpbiwgY29tbWFuZCksCisgICAgICAgICAgICAnaW52b2NhdGlvbic6IHNlbGYuX2dlbmVy
YXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSwKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwg
VGVtcGxhdGUoVGVtcGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRs
ZXJJbXBsZW1lbnRhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBj
b21tYW5kKToKKyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAgICMgRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8xMzgyMjE+IFdlYiBJbnNwZWN0b3I6IE9iakMgUHJvdG9jb2wgSW50ZXJm
YWNlcyBzaG91bGQgdGhyb3cgZXhjZXB0aW9ucyBmb3IgbmlsIGFyZ3VtZW50cworCisgICAgICAg
IGlmIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBzdWNjZXNzX2Jsb2Nr
X3BhcmFtZXRlcnMgPSBbXQorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0
b3Iub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJh
bWV0ZXIpCisgICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZp
ZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAg
ICAgICAgICBzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMuYXBwZW5kKGpvaW5fdHlwZV9hbmRfbmFt
ZShvYmpjX3R5cGUsIHZhcl9uYW1lKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF4oJXMpIHsnICUgJywgJy5qb2luKHN1Y2Nlc3NfYmxvY2tfcGFy
YW1ldGVycykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeycpCisKKyAgICAgICAgaWYgY29tbWFuZC5yZXR1cm5fcGFy
YW1ldGVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisg
ICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Cisg
ICAgICAgICAgICAgICAga2V5ZWRfc2V0X21ldGhvZCA9IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0
aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQorICAgICAgICAgICAgICAgIHZhcl9uYW1lID0g
T2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpCisgICAgICAgICAgICAgICAgdmFyX2V4cHJlc3Npb24gPSAnKiVzJyAlIHZh
cl9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCisgICAgICAgICAg
ICAgICAgZXhwb3J0X2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfZXhw
b3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCB2YXJfZXhwcmVzc2lv
bikKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmVzdWx0T2JqZWN0LT4lcyhBU0NJ
SUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBpZiAoJXMpJyAlIHZhcl9u
YW1lKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHRPYmplY3QucmVsZWFzZSgpLCBTdHJpbmcoKSk7JykKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBTdHJp
bmcoKSk7JykKKworICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9OycpCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9j
b21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAg
ICAgaWYgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCisKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJXMnICUgcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBvYmpjX2luX3BhcmFtX25hbWUgPSAnb18lcycgJSBpbl9wYXJh
bV9uYW1lCisgICAgICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9m
b3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyLCBGYWxzZSkK
KyAgICAgICAgICAgIGluX3BhcmFtX29wdGlvbmFsX3NhZmVfbmFtZSA9ICcqJXMnICUgaW5fcGFy
YW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBpbl9wYXJhbV9uYW1lCisgICAg
ICAgICAgICBpbXBvcnRfZXhwcmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9p
bXBvcnRfZXhwcmVzc2lvbl9mb3JfcGFyYW1ldGVyKGluX3BhcmFtX29wdGlvbmFsX3NhZmVfbmFt
ZSwgZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICAgICAg
aWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAlcyA9ICVzOycgJSAoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgb2JqY19p
bl9wYXJhbV9uYW1lKSwgaW1wb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlczsnICUgam9pbl90eXBlX2FuZF9uYW1l
KG9iamNfdHlwZSwgb2JqY19pbl9wYXJhbV9uYW1lKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpZiAoJXMpJyAlIGluX3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgICVzID0gJXM7JyAlIChvYmpjX2luX3BhcmFtX25hbWUsIGltcG9y
dF9leHByZXNzaW9uKSkKKworICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAg
ICAgICBwYWlycyA9IFtdCisgICAgICAgIHBhaXJzLmFwcGVuZCgnV2l0aEVycm9yQ2FsbGJhY2s6
ZXJyb3JDYWxsYmFjaycpCisgICAgICAgIHBhaXJzLmFwcGVuZCgnc3VjY2Vzc0NhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjaycpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9uYW1lID0gJ29fJXMn
ICUgaW5fcGFyYW1fbmFtZQorICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIG9wdGlvbmFsX2V4cHJlc3Npb24gPSAnKCVzID8gJiVzIDogbmlsKScgJSAo
aW5fcGFyYW1fbmFtZSwgb2JqY19pbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAgICAgIHBhaXJz
LmFwcGVuZCgnJXM6JXMnICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgb3B0aW9uYWxfZXhw
cmVzc2lvbikpCisgICAgICAgIHJldHVybiAnICAgIFttX2RlbGVnYXRlICVzJXNdOycgJSAoY29t
bWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlv
bl9oZWFkZXIucHkKc2ltaWxhcml0eSBpbmRleCA1MyUKY29weSBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmNvcHkgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlv
bl9oZWFkZXIucHkKaW5kZXggMGFmNjNkMy4uZGZhZjk3ZiAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJh
dGlvbl9oZWFkZXIucHkKQEAgLTI3LDY1ICsyNyw2MCBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1w
b3J0IHN0cmluZwotaW1wb3J0IHJlCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAorZnJv
bSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvcgogZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQogCiAKLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yKEdlbmVyYXRvcik6CitjbGFzcyBPYmplY3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVy
YXRvcihHZW5lcmF0b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgogICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJu
ICdJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCcKKyAgICAgICAgcmV0dXJu
ICclc0NvbmZpZ3VyYXRpb24uaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCiAKICAgICBk
ZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBoZWFkZXJzID0gWwotICAgICAgICAg
ICAgJyJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiJywKLSAgICAgICAgICAgICc8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4nLAorICAgICAgICAgICAgJyIlcy5o
IicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAogICAgICAgICBdCiAKICAgICAgICAgaGVh
ZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5zdWIoJ1xX
KycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCi0gICAgICAgICAgICAnaW5jbHVkZXMn
OiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10p
LAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVy
IGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAogICAgICAgICB9CiAKKyAgICAgICAgc2VsZi5fY29t
bWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFu
ZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisgICAgICAgIHNlbGYuX2V2ZW50X2ZpbHRl
ciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVy
X2ZpbHRlcihzZWxmLm1vZGVsKCkpCisKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190
b19nZW5lcmF0ZSgpCiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUHJlbHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicu
am9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4sIGRvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5PYmpDR2VuZXJpY0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipo
ZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jb25m
aWd1cmF0aW9uX2ludGVyZmFjZV9mb3JfZG9tYWlucyhkb21haW5zKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDR2VuZXJpY0hlYWRlclBvc3RsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xuXG4nLmpv
aW4oc2VjdGlvbnMpCiAKLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgaWYgbm90IGRvbWFpbi5jb21tYW5kczoK
LSAgICAgICAgICAgIHJldHVybiAnJwotCi0gICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0g
W10KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAg
Y29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCkpCi0KLSAgICAgICAgaGFuZGxlcl9hcmdzID0gewot
ICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAg
ICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucyks
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9uKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNs
YXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICBkZWYgX2dlbmVyYXRlX2Nv
bmZpZ3VyYXRpb25faW50ZXJmYWNlX2Zvcl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgogICAgICAg
ICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElkJ10KLSAgICAg
ICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19m
b3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgIGNvbW1hbmRfYXJncyA9IHsKLSAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCi0gICAgICAgIH0KLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykg
PSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSBS
V0lQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdCcpCisgICAgICAgIGZvciBkb21haW4g
aW4gZG9tYWluczoKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9wcm9w
ZXJ0aWVzX2Zvcl9kb21haW4oZG9tYWluKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykK
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfcHJv
cGVydGllc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHByb3BlcnR5X2FyZ3Mg
PSB7CisgICAgICAgICAgICAnb2JqY1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgs
CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAg
ICAgICd2YXJpYWJsZU5hbWVQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJl
Zml4X2Zvcl9kb21haW4oZG9tYWluKSwKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10K
KyAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21h
aW4pOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29u
ZmlndXJhdGlvbkNvbW1hbmRQcm9wZXJ0eSkuc3Vic3RpdHV0ZShOb25lLCAqKnByb3BlcnR5X2Fy
Z3MpKQorICAgICAgICBpZiBkb21haW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9t
YWluKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0Nv
bmZpZ3VyYXRpb25FdmVudFByb3BlcnR5KS5zdWJzdGl0dXRlKE5vbmUsICoqcHJvcGVydHlfYXJn
cykpCisgICAgICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmln
dXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1w
bGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTY4OTk0
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50
YXRpb24ucHkKQEAgLTAsMCArMSwxNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBD
b3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQg
bG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zy
b20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gZ2VuZXJh
dG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKKworCitjbGFzcyBPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwg
aW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuICclc0NvbmZpZ3VyYXRpb24ubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJ
WAorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hl
YWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5P
QkpDX1BSRUZJWCwKKyAgICAgICAgICAgICciJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgT2Jq
Q0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4nLAorICAgICAgICAgICAgJzxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4nLAorICAg
ICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4n
LAorICAgICAgICBdCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJp
bWFyeUluY2x1ZGUnOiAnIiVzQ29uZmlndXJhdGlvbi5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2lt
cG9ydCAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAg
ICAgICB9CisKKyAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNo
b3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkp
CisgICAgICAgIHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisKKyAgICAg
ICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25z
ID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNJbXBsZW1lbnRh
dGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW5zKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
VGVtcGxhdGVzLk9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMo
c2VsZiwgZG9tYWlucyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5k
KCdAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xDb25maWd1cmF0aW9uJykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsnKQorICAgICAgICBsaW5lcy5leHRlbmQoc2Vs
Zi5fZ2VuZXJhdGVfaXZhcnMoZG9tYWlucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXInKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBzZWxmID0gW3N1cGVyIGluaXRdOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGlmICghc2VsZiknKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG5p
bDsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoY29udHJvbGxlcik7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiBzZWxmOycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNl
bGYuX2dlbmVyYXRlX2RlYWxsb2MoZG9tYWlucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
KyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgaWYgZG9tYWluLmNv
bW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWluKGRv
bWFpbikpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgaWYg
ZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfZ2V0dGVy
X2Zvcl9kb21haW4oZG9tYWluKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2l2YXJzKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBs
aW5lcyA9IFtdCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGlm
IGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKKyAgICAg
ICAgICAgICAgICBvYmpjX2NsYXNzX25hbWUgPSAnJXMlc0RvbWFpbkhhbmRsZXInICUgKE9iakNH
ZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgICAg
ICBpdmFyX25hbWUgPSAnXyVzSGFuZGxlcicgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVf
cHJlZml4X2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGlkPCVzPiAlczsnICUgKG9iamNfY2xhc3NfbmFtZSwgaXZhcl9uYW1lKSkKKyAgICAgICAg
ICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgorICAg
ICAgICAgICAgICAgIG9iamNfY2xhc3NfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVy
JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCisgICAg
ICAgICAgICAgICAgaXZhcl9uYW1lID0gJ18lc0V2ZW50RGlzcGF0Y2hlcicgJSBPYmpDR2VuZXJh
dG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIColczsnICUgKG9iamNfY2xhc3NfbmFtZSwgaXZhcl9u
YW1lKSkKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgX2dlbmVyYXRlX2RlYWxsb2Mo
c2VsZiwgZG9tYWlucyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5k
KCctICh2b2lkKWRlYWxsb2MnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBm
b3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5k
IHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgW18lc0hhbmRsZXIgcmVsZWFzZV07JyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVf
bmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pKQorICAgICAgICAgICAgaWYgZG9tYWluLmV2
ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgW18lc0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsnICUgT2JqQ0dlbmVy
YXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFtzdXBlciBkZWFsbG9jXTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J30nKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9z
ZXR0ZXJfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBzZXR0ZXJfYXJncyA9IHsK
KyAgICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J3ZhcmlhYmxlTmFtZVByZWZpeCc6IE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhf
Zm9yX2RvbWFpbihkb21haW4pLAorICAgICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShU
ZW1wbGF0ZXMuT2JqQ0NvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHlJbXBsZW1lbnRhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKnNldHRlcl9hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVu
dF9kaXNwYXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGdl
dHRlcl9hcmdzID0geworICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9C
SkNfUFJFRklYLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUs
CisgICAgICAgICAgICAndmFyaWFibGVOYW1lUHJlZml4JzogT2JqQ0dlbmVyYXRvci52YXJpYWJs
ZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbiksCisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29uZmlndXJhdGlvbkdldHRlckltcGxlbWVudGF0
aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqZ2V0dGVyX2FyZ3MpCisKKyAgICBkZWYgX3ZhcmlhYmxl
X25hbWVfcHJlZml4X2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgZG9tYWluX25h
bWUgPSBkb21haW4uZG9tYWluX25hbWUKKyAgICAgICAgaWYgZG9tYWluX25hbWUuc3RhcnRzd2l0
aCgnRE9NJyk6CisgICAgICAgICAgICByZXR1cm4gJ2RvbScgKyBkb21haW5fbmFtZVszOl0KKyAg
ICAgICAgaWYgZG9tYWluX25hbWUuc3RhcnRzd2l0aCgnQ1NTJyk6CisgICAgICAgICAgICByZXR1
cm4gJ2NzcycgKyBkb21haW5fbmFtZVszOl0KKyAgICAgICAgcmV0dXJuIGRvbWFpbl9uYW1lWzox
XS5sb3dlcigpICsgZG9tYWluX25hbWVbMTpdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb252
ZXJzaW9uX2hlbHBlcnMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Y3NTIxYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weQpAQCAtMCwwICsxLDE1NSBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBv
cnQgT2JqQ0dlbmVyYXRvcgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBn
ZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVz
Citmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
J2dsb2JhbCcpCisKKworZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKKyAgICBpZiBsaW5lcyBhbmQg
bGluZXNbLTFdID09ICcnOgorICAgICAgICByZXR1cm4KKyAgICBsaW5lcy5hcHBlbmQoJycpCisK
KworY2xhc3MgT2JqZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKEdlbmVyYXRvcik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAg
IEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBk
ZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzRW51bUNvbnZlcnNp
b25IZWxwZXJzLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRv
ci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRw
dXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzQXJyYXlDb252
ZXJzaW9uSGVscGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICBd
CisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4n
LmpvaW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCisgICAg
ICAgIH0KKworICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAg
ICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0
ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
T2JqQ0NvbnZlcnNpb25IZWxwZXJzUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29u
dmVyc2lvbkhlbHBlcnNTdGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkKKyAgICAgICAgc2VjdGlv
bnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zLCBk
b21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpD
Q29udmVyc2lvbkhlbHBlcnNQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdz
KSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxp
bmVzID0gW10KKworICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KKyAgICAg
ICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgorICAgICAgICAg
ICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihk
b21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
Zm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBl
LmlzX2Fub255bW91cyk6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5l
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwg
bWVtYmVyKSkKKworICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgorICAgICAgICBm
b3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBmb3IgcGFyYW1ldGVy
IGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIChpc2luc3Rh
bmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255
bW91cyk6CisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29u
dmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikpCisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKKyAgICAgICAgICAgICAg
ICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIo
ZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKworICAgICAgICAjIEFu
b255bW91cyBldmVudCBlbnVtcy4KKyAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6
CisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Cisg
ICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBh
bmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKKyAgICAgICAgICAgICAgICAgICAgYWRk
X25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBl
dmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9y
X2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgorICAgICAgICBvYmpjX2Vu
dW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVt
X2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IGRlY2xhcmF0
aW9uLnR5cGUuZW51bV92YWx1ZXMoKQorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNf
ZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVl
cykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVj
bGFyYXRpb24sIG1lbWJlcik6CisgICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBt
ZW1iZXIpCisgICAgICAgIGVudW1fdmFsdWVzID0gbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKQor
ICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9l
bnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykp
CisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xf
c3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCisgICAgICAgIHJldHVybiAnXG5c
bicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVy
c2lvbl9mb3JfcGFyYW1ldGVyKHNlbGYsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBw
YXJhbWV0ZXIpOgorICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19l
bnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2Nv
bW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IHBhcmFtZXRlci50
eXBlLmVudW1fdmFsdWVzKCkKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1f
bmFtZSwgZW51bV92YWx1ZXMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
ZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQor
ICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Vu
dW1fb2JqY190b19wcm90b2NvbF9zdHJpbmcoc2VsZiwgb2JqY19lbnVtX25hbWUsIGVudW1fdmFs
dWVzKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2lubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyglcyB2YWx1ZSknICUgb2JqY19lbnVtX25hbWUpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHN3aXRjaCh2
YWx1ZSkgeycpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdmFsdWVzOgorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgY2FzZSAlcyVzOicgJSAob2JqY19lbnVtX25hbWUsIEdl
bmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIlcyIpOycg
JSBlbnVtX3ZhbHVlKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRl
ZiBfZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhzZWxmLCBvYmpjX2VudW1fbmFt
ZSwgZW51bV92YWx1ZXMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgndGVtcGxhdGU8PicpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnaW5saW5lICVzIGZyb21Qcm90
b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpJyAlIG9iamNfZW51bV9uYW1lKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ3snKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX3ZhbHVlczoKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICh2YWx1ZSA9PSAiJXMiKScgJSBlbnVtX3Zh
bHVlKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiAlcyVzOycgJSAo
b2JqY19lbnVtX25hbWUsIEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVu
dW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuICVzJXM7JyAlIChvYmpjX2Vu
dW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1
ZXNbMF0pKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxM2FmMmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMK
KyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQor
Citmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIGdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgT2JqZWN0aXZlQ0Zyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzRXZlbnREaXNwYXRjaGVycy5tbScgJSBPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgor
ICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKKyAgICAgICAgICAgICciJXNFbnVtQ29udmVy
c2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAg
ICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKKyAgICAgICAg
ICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgXQorCisg
ICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIl
c0ludGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAn
c2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICVzJyAlIGhlYWRlciBmb3Ig
aGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgIH0KKworICAgICAgICBkb21h
aW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VjdGlvbnMgPSBbXQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0ltcGxlbWVudGF0aW9uUHJl
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
cywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
T2JqQ0ltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMoc2VsZiwgZG9tYWluKToKKyAg
ICAgICAgaWYgbm90IGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAg
ICAgICBsaW5lcyA9IFtdCisgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNw
YXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzJyAlIG9iamNfbmFtZSkK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICByZXR1cm4gbmlsOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChj
b250cm9sbGVyKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAg
ICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9ldmVudChkb21haW4sIGV2ZW50KSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnQoc2VsZiwgZG9tYWluLCBl
dmVudCk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2V2ZW50X3NpZ25hdHVyZShkb21haW4sIGV2ZW50KSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBmcm9udGVuZENoYW5uZWwgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRDaGFubmVsKCk7JykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFmcm9udGVuZENoYW5uZWwpJykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpz
b25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiks
IEFTQ0lJTGl0ZXJhbCgiJXMuJXMiKSk7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2
ZW50X25hbWUpKQorICAgICAgICBpZiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFp
biwgZXZlbnQpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBmcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X3NpZ25hdHVyZShzZWxmLCBkb21haW4sIGV2ZW50KToK
KyAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICByZXR1
cm4gJy0gKHZvaWQpJXMnICUgZXZlbnQuZXZlbnRfbmFtZQorICAgICAgICBwYWlycyA9IFtdCisg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAg
ICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBh
aXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBPYmpDR2VuZXJhdG9yLm9iamNf
dHlwZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJh
bV9uYW1lKSkKKyAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQorICAgICAgICBy
ZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXMnICUgKGV2ZW50LmV2ZW50X25hbWUsICcgJy5qb2luKHBh
aXJzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMoc2VsZiwgZG9t
YWluLCBldmVudCk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsnKQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gR2VuZXJhdG9yLmtleWVkX3Nl
dF9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpCisgICAgICAgICAgICB2YXJfbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgc2FmZV92YXJfbmFtZSA9ICco
KiVzKScgJSB2YXJfbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSB2YXJfbmFtZQor
ICAgICAgICAgICAgZXhwb3J0X2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9j
b2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBzYWZlX3Zh
cl9uYW1lKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiVzKEFTQ0lJTGl0ZXJh
bCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICglcyknICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+
JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbXNPYmplY3QpOycpCisgICAgICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAuLmRiY2U1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVf
Y19oZWFkZXIucHkKQEAgLTAsMCArMSwyMjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisK
K2Zyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlw
ZV9hbmRfbmFtZQorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJv
bSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCitmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUKKworbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKKyAg
ICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgICAgICByZXR1cm4KKyAgICBsaW5l
cy5hcHBlbmQoJycpCisKKworY2xhc3MgT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRvcihHZW5lcmF0
b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAg
ICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisg
ICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICclcy5oJyAlIE9i
akNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
CisgICAgICAgIGhlYWRlcnMgPSBzZXQoWworICAgICAgICAgICAgJzxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+JywKKyAgICAgICAgXSkKKworICAgICAgICBoZWFkZXJfYXJn
cyA9IHsKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhl
YWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAorICAgICAgICB9CisKKyAgICAg
ICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHR5cGVfZG9t
YWlucyA9IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNf
ZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCisgICAgICAgIGNvbW1hbmRfZG9tYWlucyA9
IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5k
bGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQorICAgICAgICBldmVudF9kb21haW5z
ID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNw
YXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQorCisgICAgICAgICMgRklYTUU6
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzgyMjI+IFdlYiBJbnNwZWN0b3I6IFJlZHVjZSB1bm5l
Y2Vzc2FyeSBlbnVtcy90eXBlcyBnZW5lcmF0ZWQgaW4gT2JqQyBQcm90b2NvbCBJbnRlcmZhY2Vz
CisgICAgICAgICMgQ3VycmVudGx5IHdlIGdlbmVyYXRlIGVudW1zL3R5cGVzIGZvciBhbGwgdHlw
ZXMgaW4gdGhlIHR5cGVfZG9tYWlucy4gRm9yIHRoZSBidWlsdC1pbgorICAgICAgICAjIEpTQyBk
b21haW5zIChEZWJ1Z2dlciwgUnVudGltZSkgdGhpcyBwcm9kdWNlcyBleHRyYSB1bnVzZWQgdHlw
ZXMuIFdlIG9ubHkgbmVlZCB0bworICAgICAgICAjIGdlbmVyYXRlIHRoZXNlIHR5cGVzIGlmIHRo
ZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGNvbW1hbmRfZG9tYWlucyBvciBldmVudF9kb21haW5z
LgorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
Z2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLk9iakNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2Vs
Zi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlucykpKSkKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVy
YXRlX2VudW1zLCB0eXBlX2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4n
LmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlcywgdHlwZV9kb21haW5z
KSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1h
cChzZWxmLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scywgY29tbWFuZF9kb21haW5zKSkpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxm
Ll9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzLCBldmVudF9kb21haW5zKSkpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNIZWFkZXJQb3N0bHVkZSkuc3Vi
c3RpdHV0ZShOb25lKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmLCBkb21haW4pOgorICAg
ICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9k
ZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBl
LCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICAgICAgb2JqY19uYW1lID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRpb24udHlwZSkKKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0BjbGFzcyAlczsnICUgb2JqY19uYW1lKQorICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9lbnVtcyhzZWxmLCBkb21haW4pOgor
ICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51
bXMuCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6
CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKGRv
bWFpbiwgZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBm
b3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5p
c19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisKKyAg
ICAgICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KKyAgICAgICAgZm9yIGNvbW1hbmQgaW4g
ZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKKyAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFp
biwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICBmb3IgcGFy
YW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5p
c19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAg
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIp
KQorCisgICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVudW1zLgorICAgICAgICBmb3IgZXZlbnQg
aW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZl
bnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKKyAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFp
biwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKKworICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV90eXBlcyhzZWxmLCBkb21haW4pOgorICAg
ICAgICBsaW5lcyA9IFtdCisgICAgICAgICMgVHlwZSBpbnRlcmZhY2VzLgorICAgICAgICBmb3Ig
ZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAg
ICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfdHlwZV9pbnRlcmZhY2UoZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKKyAgICAgICAgb2Jq
Y19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNf
ZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVy
YXRlX2VudW0ob2JqY19lbnVtX25hbWUsIGRlY2xhcmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKSkK
KworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcihzZWxmLCBkb21h
aW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNH
ZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihkZWNsYXJh
dGlvbiwgbWVtYmVyKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2Vu
dW1fbmFtZSwgbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKSkKKworICAgIGRlZiBfZ2VuZXJhdGVf
YW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBkb21haW4sIGV2ZW50X29yX2NvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJh
dG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBl
dmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dl
bmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCkp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW0oc2VsZiwgZW51bV9uYW1lLCBlbnVtX3ZhbHVlcyk6
CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCd0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCAlcykgeycgJSBlbnVtX25hbWUpCisgICAgICAgIGZvciBlbnVtX3ZhbHVl
IGluIGVudW1fdmFsdWVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMlcywnICUg
KGVudW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92
YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9pbnRlcmZhY2Uoc2VsZiwgZG9t
YWluLCBkZWNsYXJhdGlvbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgb2JqY19uYW1l
ID0gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRpb24udHlwZSkKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIDogJXMnICUgKG9iamNfbmFtZSwgT2Jq
Q0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JBU0UpKQorICAgICAgICByZXF1aXJlZF9tZW1i
ZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihs
YW1iZGEgbWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cykKKyAgICAgICAgaWYgcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhkb21haW4s
IGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKSkKKyAgICAgICAgZm9yIG1lbWJlciBpbiBy
ZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiByZXF1aXJlZCAq
LyAnICsgc2VsZi5fZ2VuZXJhdGVfbWVtYmVyX3Byb3BlcnR5KGRlY2xhcmF0aW9uLCBtZW1iZXIp
KQorICAgICAgICBmb3IgbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJy8qIG9wdGlvbmFsICovICcgKyBzZWxmLl9nZW5lcmF0ZV9tZW1iZXJfcHJv
cGVydHkoZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcp
CisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2lu
aXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24s
IHJlcXVpcmVkX21lbWJlcnMpOgorICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIGZvciBtZW1i
ZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5l
cmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAg
ICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmll
cihtZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcykl
cycgJSAodmFyX25hbWUsIG9iamNfdHlwZSwgdmFyX25hbWUpKQorICAgICAgICBwYWlyc1swXSA9
IHVjZmlyc3QocGFpcnNbMF0pCisgICAgICAgIHJldHVybiAnLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoJXM7JyAlICcgJy5qb2luKHBhaXJzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9tZW1iZXJfcHJv
cGVydHkoc2VsZiwgZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAgICAgIGFjY2Vzc29yX3R5cGUg
PSBPYmpDR2VuZXJhdG9yLm9iamNfYWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyKG1lbWJlcikKKyAg
ICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNs
YXJhdGlvbiwgbWVtYmVyKQorICAgICAgICByZXR1cm4gJ0Bwcm9wZXJ0eSAobm9uYXRvbWljLCAl
cykgJXM7JyAlIChhY2Nlc3Nvcl90eXBlLCBqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBP
YmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJf
bmFtZSkpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scyhzZWxmLCBkb21h
aW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kczoKKyAg
ICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluSGFuZGxlcicgJSAoT2JqQ0dlbmVyYXRv
ci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCdAcHJvdG9jb2wgJXMgPE5TT2JqZWN0PicgJSBvYmpjX25hbWUpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0ByZXF1aXJlZCcpCisgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21h
aW4uY29tbWFuZHM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKGRvbWFpbiwgY29tbWFuZCkpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbChzZWxmLCBkb21haW4sIGNv
bW1hbmQpOgorICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIHBhaXJzLmFwcGVuZCgnRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2snKQorICAgICAg
ICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFjazooJXMpc3VjY2Vzc0NhbGxiYWNrJyAlIHNl
bGYuX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCkpCisgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBw
YXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYWlycy5h
cHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFtZSwgT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVf
Zm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFt
X25hbWUpKQorICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNv
bW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorCisgICAgZGVmIF9jYWxsYmFja19ibG9ja19m
b3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBwYWlycyA9IFtdCisg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhaXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUoT2JqQ0dlbmVyYXRvci5vYmpj
X3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciks
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJldHVybiAndm9pZCheKSglcykn
ICUgJywgJy5qb2luKHBhaXJzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2Vz
KHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgZG9tYWluLmV2
ZW50czoKKyAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVy
JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgOiBOU09iamVjdCcgJSBvYmpjX25h
bWUpCisgICAgICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShk
b21haW4sIGV2ZW50KSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9ldmVu
dF9pbnRlcmZhY2Uoc2VsZiwgZG9tYWluLCBldmVudCk6CisgICAgICAgIGlmIG5vdCBldmVudC5l
dmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcmV0dXJuICctICh2b2lkKSVzOycgJSBldmVu
dC5ldmVudF9uYW1lCisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMn
ICUgKHBhcmFtX25hbWUsIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4s
IGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQorICAgICAgICBwYWly
c1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCisgICAgICAgIHJldHVybiAnLSAodm9pZCklc1dpdGgl
czsnICUgKGV2ZW50LmV2ZW50X25hbWUsICcgJy5qb2luKHBhaXJzKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Fs
dGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJu
YWxfaGVhZGVyLnB5CnNpbWlsYXJpdHkgaW5kZXggNTAlCmNvcHkgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpjb3B5IHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hl
YWRlci5weQppbmRleCAwYWY2M2QzLi5iYWRjOGMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFk
ZXIucHkKQEAgLTI3LDY1ICsyNyw0OSBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHN0cmlu
ZwotaW1wb3J0IHJlCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAotZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2Jq
Q0dlbmVyYXRvcgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAogZnJv
bSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKLWNsYXNzIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CitjbGFzcyBP
YmplY3RpdmVDVHlwZXNJbnRlcm5hbEhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgogICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQogCiAgICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICdJbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCcKKyAgICAgICAgcmV0dXJuICclc0ludGVybmFsLmgnICUgT2JqQ0dl
bmVyYXRvci5PQkpDX1BSRUZJWAogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAg
ICAgICAgaGVhZGVycyA9IFsKLSAgICAgICAgICAgICciSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
IicsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+JywKLSAgICAgICAgXQorICAgICAgICBoZWFkZXJzID0gc2V0KFsKKyAgICAgICAgICAg
ICciJXMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICciUldJ
UHJvdG9jb2xKU09OT2JqZWN0SW50ZXJuYWwuaCInLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4nLAorICAgICAgICBdKQogCiAgICAgICAg
IGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3Vi
KCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAotICAgICAgICAgICAgJ2luY2x1
ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRl
cnNdKSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhl
YWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAogICAgICAgICB9CiAKICAgICAg
ICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIGV2ZW50X2Rv
bWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50
X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCisKICAgICAgICAgc2Vj
dGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQWx0ZXJuYXRl
RGlzcGF0Y2hlcnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2Vs
Zi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpKSkK
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNw
YXRjaGVyc0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNHZW5lcmljSGVh
ZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVf
ZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFk
ZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0
dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlmIG5vdCBkb21h
aW4uY29tbWFuZHM6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAgICBjb21tYW5kX2Rl
Y2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoK
LSAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpKQotCi0gICAgICAgIGhhbmRs
ZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAotICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9k
ZWNsYXJhdGlvbnMpLAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlv
bikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCi0KLSAgICBkZWYgX2dlbmVyYXRl
X2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgZGVm
IF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcyhzZWxmLCBkb21h
aW4pOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2Fs
bElkJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6
Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKEdlbmVyYXRvci50
eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgIGNvbW1hbmRfYXJncyA9IHsK
LSAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAg
ICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCi0gICAgICAgIH0KLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBh
cmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGlmIGRvbWFpbi5ldmVu
dHM6CisgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hlcicg
JSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIChQcml2YXRlKScgJSBvYmpjX25hbWUp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNmQ1MDExCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxNDggQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9i
akNHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zy
b20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBs
YXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoJ2dsb2JhbCcpCisKKworZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKKyAgICBpZiBsaW5l
cyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgICAgICByZXR1cm4KKyAgICBsaW5lcy5hcHBlbmQo
JycpCisKKworY2xhc3MgT2JqZWN0aXZlQ1R5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2Vu
ZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToK
KyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkK
KworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnJXNUeXBl
cy5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYgZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3Vs
ZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzRW51bUNv
bnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAg
ICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPicsCisgICAgICAgICAgICAn
PHd0Zi9Bc3NlcnRpb25zLmg+JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAor
ICAgICAgICBdCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFy
eUluY2x1ZGUnOiAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwK
KyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJXMn
ICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgfQor
CisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBz
ZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vu
c2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSW1w
bGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAg
ICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlv
bnMsIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
Lk9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2Vu
ZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMoc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25z
OgorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlw
ZSkpOgorICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24oZG9tYWluLCBk
ZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYg
Z2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToK
KyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlv
biAlcycgJSBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBl
KSkKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3Qg
bWVtYmVyLmlzX29wdGlvbmFsLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIGlm
IHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVk
X21lbWJlcnMoZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycykpCisgICAgICAg
IGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3Nl
dHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfZ2V0dGVyX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhv
ZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJl
ZF9tZW1iZXJzKToKKyAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICBmb3IgbWVtYmVyIGluIHJl
cXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9i
amNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgICAgICB2YXJf
bmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVy
Lm1lbWJlcl9uYW1lKQorICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHZh
cl9uYW1lLCBvYmpjX3R5cGUsIHZhcl9uYW1lKSkKKyAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0
KHBhaXJzWzBdKQorICAgICAgICAjIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4MjIx
PiBXZWIgSW5zcGVjdG9yOiBPYmpDIFByb3RvY29sIEludGVyZmFjZXMgc2hvdWxkIHRocm93IGV4
Y2VwdGlvbnMgZm9yIG5pbCBhcmd1bWVudHMKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBs
aW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aCVzOycgJSAnICcuam9pbihwYWly
cykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFz
ZWxmKScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1i
ZXJzOgorICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9f
b2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIHNlbGYuJXMgPSAlczsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWlu
LCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICB2YXJf
bmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVy
Lm1lbWJlcl9uYW1lKQorICAgICAgICBzZXR0ZXJfbWV0aG9kID0gT2JqQ0dlbmVyYXRvci5vYmpj
X3NldHRlcl9tZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICBj
b252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLm9iamNfdG9fcHJvdG9jb2xfZXhw
cmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIsIHZhcl9uYW1lKQorICAgICAg
ICAjIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4MjIxPiBXZWIgSW5zcGVjdG9yOiBP
YmpDIFByb3RvY29sIEludGVyZmFjZXMgc2hvdWxkIHRocm93IGV4Y2VwdGlvbnMgZm9yIG5pbCBh
cmd1bWVudHMKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKHZv
aWQpc2V0JXM6KCVzKSVzJyAlICh1Y2ZpcnN0KHZhcl9uYW1lKSwgb2JqY190eXBlLCB2YXJfbmFt
ZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IFtzdXBlciAlczolcyBmb3JLZXk6QCIlcyJdOycgJSAoc2V0dGVyX21ldGhvZCwgY29udmVyc2lv
bl9leHByZXNzaW9uLCBtZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0
ZV9nZXR0ZXJfZm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgor
ICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRl
Y2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVu
dGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAgIGdl
dHRlcl9tZXRob2QgPSBPYmpDR2VuZXJhdG9yLm9iamNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVy
KGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIGJhc2ljX2V4cHJlc3Npb24gPSAnW3N1cGVy
ICVzOkAiJXMiXScgJSAoZ2V0dGVyX21ldGhvZCwgbWVtYmVyLm1lbWJlcl9uYW1lKQorICAgICAg
ICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3RvX29iamNf
ZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIsIGJhc2ljX2V4cHJlc3Np
b24pCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCctICglcyklcycg
JSAob2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiAlczsnICUgY29udmVyc2lvbl9leHByZXNzaW9u
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyLnB5CmluZGV4IGVjZmUzYWIuLjQ3YjQzODIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29s
X3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKQEAgLTExMSw3
ICsxMTEsNyBAQCBjbGFzcyBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdjbGFzcyAlczsnICUgbmFtZSBmb3Ig
bmFtZSBpbiBzb3J0ZWQob2JqZWN0X3R5cGVfbmFtZXMpKQogICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmV4dGVuZCgnZW51bSBjbGFzcyAlczsnICUgbmFtZSBmb3IgbmFtZSBpbiBzb3J0ZWQoZW51
bV90eXBlX25hbWVzKSkKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMn
ICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKEdlbmVy
YXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihkb21haW5f
bGluZXMpKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogCiAgICAgICAg
IGlmIGxlbihzZWN0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAnJwpAQCAtMTUwLDcg
KzE1MCw3IEBAIGNsYXNzIFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToK
ICAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25h
bWUpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnXG5cbicuam9pbihzZWN0aW9ucykpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgIHJl
dHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpv
aW4obGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFp
bihkb21haW4sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJz
X2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgc2VjdGlvbnMgPSBbXQpAQCAtMTY5
LDcgKzE2OSw3IEBAIGNsYXNzIFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9y
KToKICAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWlu
X25hbWUpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnXG4nLmpvaW4oc2VjdGlvbnMpKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICBy
ZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5q
b2luKGxpbmVzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21h
aW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9jbGFzc19m
b3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24sIGRvbWFpbik6CiAg
ICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykgPT0gMDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvci5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDU2
YjQyNjUuLmI5YzQzOGYKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtMzAsNyArMzAsNyBAQCBpbXBv
cnQgcmUKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiBmcm9tIGdlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxz
IGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBB
bGlhc2VkVHlwZQorZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUs
IEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC0yMDAsMTggKzIwMCwyMSBAQCBjbGFzcyBH
ZW5lcmF0b3I6CiAgICAgICAgIHNlbGYuX2Fzc2lnbmVkX2VudW1fdmFsdWVzLmFwcGVuZChlbnVt
X3ZhbHVlKQogCiAgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQgbWFuaXB1bGF0aW9uIHJvdXRpbmVz
LgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4o
ZG9tYWluLCB0ZXh0KToKLSAgICAgICAgZ3VhcmQgPSBkb21haW4uZmVhdHVyZV9ndWFyZAotICAg
ICAgICBpZiBndWFyZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGxpbmVzID0gWwotICAgICAg
ICAgICAgICAgICcjaWYgJXMnICUgZ3VhcmQsCi0gICAgICAgICAgICAgICAgdGV4dCwKLSAgICAg
ICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGd1YXJkCi0gICAgICAgICAgICAgICAgXQotICAg
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLSAgICAgICAgZWxzZToKKyAgICBkZWYg
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluLCB0ZXh0KToKKyAgICAgICAg
aWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYkluc3BlY3RvcjoKICAg
ICAgICAgICAgIHJldHVybiB0ZXh0CisgICAgICAgIGd1YXJkID0gZG9tYWluLmZlYXR1cmVfZ3Vh
cmQKKyAgICAgICAgaWYgZ3VhcmQ6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBf
d2l0aF9ndWFyZChndWFyZCwgdGV4dCkKKyAgICAgICAgcmV0dXJuIHRleHQKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgd3JhcF93aXRoX2d1YXJkKGd1YXJkLCB0ZXh0KToKKyAgICAgICAg
cmV0dXJuICdcbicuam9pbihbCisgICAgICAgICAgICAnI2lmICVzJyAlIGd1YXJkLAorICAgICAg
ICAgICAgdGV4dCwKKyAgICAgICAgICAgICcjZW5kaWYgLy8gJXMnICUgZ3VhcmQsCisgICAgICAg
IF0pCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHN0eWxpemVkX25hbWVfZm9yX2VudW1f
dmFsdWUoZW51bV92YWx1ZSk6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weQppbmRleCBmOTJkNzI0Li5mZThlZDU5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkKQEAgLTMwNCw1ICszMDQsMTI5IEBAICR7Y29uc3RydWN0b3JFeGFt
cGxlfQogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2Yo
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CiB9Ci0iIiIKLSkKKyIiIikK
KworICAgIE9iakNIZWFkZXJQcmVsdWRlID0gKAorICAgICIiIiNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCiske2luY2x1ZGVzfQorIiIiKQorCisgICAgT2JqQ0hlYWRlclBvc3Rs
dWRlID0gKAorICAgICIiIiIiIikKKworICAgIE9iakNDb252ZXJzaW9uSGVscGVyc1ByZWx1ZGUg
PSAoCisgICAgIiIiJHtpbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7IiIiKQorCisg
ICAgT2JqQ0NvbnZlcnNpb25IZWxwZXJzUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisiIiIpCisKKyAgICBPYmpDR2VuZXJpY0hlYWRlclByZWx1ZGUgPSAoCisg
ICAgIiIiJHtpbmNsdWRlc30iIiIpCisKKyAgICBPYmpDR2VuZXJpY0hlYWRlclBvc3RsdWRlID0g
KAorICAgICIiIiIiIikKKworICAgIE9iakNDb252ZXJzaW9uSGVscGVyc1N0YW5kYXJkID0gKAor
ICAgICIiInRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9t
UHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKTsiIiIpCisKKyAgICBPYmpDQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJQcmVsdWRlID0gKAorICAgICIiIiR7aW5jbHVkZXN9CisKKyR7Zm9yd2FyZERl
Y2xhcmF0aW9uc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisiIiIpCisKKyAgICBPYmpDQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJQb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyIiIikKKworICAgIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
UHJlbHVkZSA9ICgKKyAgICAiIiIjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgJHtwcmltYXJ5
SW5jbHVkZX0KKworJHtzZWNvbmRhcnlJbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
IiIiKQorCisgICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9
ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyIiIikKKworICAgIE9iakNJbXBs
ZW1lbnRhdGlvblByZWx1ZGUgPSAoCisgICAgIiIiI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICR7cHJpbWFyeUluY2x1ZGV9CisKKyR7c2Vjb25kYXJ5SW5jbHVkZXN9CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7IiIiKQorCisgICAgT2JqQ0ltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAo
CisgICAgIiIiIiIiKQorCisgICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFu
ZGxlckludGVyZmFjZURlY2xhcmF0aW9uID0gKAorICAgICIiImNsYXNzIEFsdGVybmF0ZUluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRl
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ciske2NvbW1hbmRE
ZWNsYXJhdGlvbnN9Cit9OyIiIikKKworICAgIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRv
bWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24gPSAoCisgICAgIiIiY2xhc3MgT2JqQ0luc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIE9i
akNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoaWQ8JHtvYmpjUHJlZml4
fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5k
bGVyOyB9Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Citwcml2YXRlOgorICAgIFJldGFpblB0cjxp
ZDwke29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwor
fTsiIiIpCisKKyAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW1w
bGVtZW50YXRpb24gPSAoCisgICAgIiIidm9pZCBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyOjoke2NvbW1hbmROYW1lfSgke3BhcmFtZXRlcnN9KQoreworICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
LCBlcnJvcik7CisgICAgfTsKKworJHtzdWNjZXNzQ2FsbGJhY2t9Ciske2NvbnZlcnNpb25zfQor
JHtpbnZvY2F0aW9ufQorfQorIiIiKQorCisgICAgT2JqQ0NvbmZpZ3VyYXRpb25Db21tYW5kUHJv
cGVydHkgPSAoCisgICAgIiIiQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNl
dCR7ZG9tYWluTmFtZX1IYW5kbGVyOikgaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21h
aW5IYW5kbGVyPiAke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyOyIiIikKKworICAgIE9iakND
b25maWd1cmF0aW9uRXZlbnRQcm9wZXJ0eSA9ICgKKyAgICAiIiJAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpICR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRj
aGVyICoke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXI7IiIiKQorCisgICAgT2Jq
Q0NvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHlJbXBsZW1lbnRhdGlvbiA9ICgKKyAgICAiIiIt
ICh2b2lkKXNldCR7ZG9tYWluTmFtZX1IYW5kbGVyOihpZDwke29iamNQcmVmaXh9JHtkb21haW5O
YW1lfURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfJHt2YXJp
YWJsZU5hbWVQcmVmaXh9SGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW18ke3Zhcmlh
YmxlTmFtZVByZWZpeH1IYW5kbGVyIHJlbGVhc2VdOworICAgIF8ke3ZhcmlhYmxlTmFtZVByZWZp
eH1IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFr
ZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8SW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIiR7ZG9tYWluTmFtZX0iKSwgV1RGOjptb3ZlKGFs
dGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YWdlbnRSZWdpc3RyeSgpLmFw
cGVuZChXVEY6Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8JHtvYmpjUHJlZml4
fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPikke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVy
Cit7CisgICAgcmV0dXJuIF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyOworfSIiIikKKwor
ICAgIE9iakNDb25maWd1cmF0aW9uR2V0dGVySW1wbGVtZW50YXRpb24gPSAoCisgICAgIiIiLSAo
JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5FdmVudERpc3BhdGNoZXIgKikke3Zhcmlh
YmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV8ke3ZhcmlhYmxlTmFt
ZVByZWZpeH1FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1F
dmVudERpc3BhdGNoZXIgPSBbWyR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnRE
aXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJl
dHVybiBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyOworfSIiIikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21v
ZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L21vZGVscy5weQppbmRleCBjOWMzNGM5Li44ZWE4YTc4IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5CkBA
IC0zOSw2ICszOSw4IEBAIF9GUkFNRVdPUktfQ09ORklHX01BUCA9IHsKICAgICAiSmF2YVNjcmlw
dENvcmUiOiB7CiAgICAgICAgICJleHBvcnRfbWFjcm8iOiAiSlNfRVhQT1JUX1BSSVZBVEUiCiAg
ICAgfSwKKyAgICAiV2ViSW5zcGVjdG9yIjogeworICAgIH0sCiAgICAgIyBVc2VkIGZvciBjb2Rl
IGdlbmVyYXRvciB0ZXN0cy4KICAgICAiVGVzdCI6IHsKICAgICB9CkBAIC02OSw2ICs3MSw5IEBA
IGNsYXNzIEZyYW1ld29yazoKICAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJKYXZhU2Ny
aXB0Q29yZSI6CiAgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZQog
CisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiV2ViSW5zcGVjdG9yIjoKKyAgICAgICAg
ICAgIHJldHVybiBGcmFtZXdvcmtzLldlYkluc3BlY3RvcgorCiAgICAgICAgIGlmIGZyYW1ld29y
a1N0cmluZyA9PSAiVGVzdCI6CiAgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5UZXN0CiAK
QEAgLTc4LDYgKzgzLDcgQEAgY2xhc3MgRnJhbWV3b3JrOgogY2xhc3MgRnJhbWV3b3JrczoKICAg
ICBHbG9iYWwgPSBGcmFtZXdvcmsoIkdsb2JhbCIpCiAgICAgSmF2YVNjcmlwdENvcmUgPSBGcmFt
ZXdvcmsoIkphdmFTY3JpcHRDb3JlIikKKyAgICBXZWJJbnNwZWN0b3IgPSBGcmFtZXdvcmsoIldl
Ykluc3BlY3RvciIpCiAgICAgVGVzdCA9IEZyYW1ld29yaygiVGVzdCIpCiAKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKaW5kZXgg
NTc1ODY1Mi4uYjBjNzJiMCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CkBAIC01Niw2ICs1NiwxNSBAQCBleGNlcHQgSW1wb3J0
RXJyb3I6CiAgICAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKICAgICBmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
IGltcG9ydCAqCiAgICAgZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uIGltcG9ydCAq
CisgICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMgaW1wb3J0
ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRl
ciBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVy
IGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRh
dGlvbiBpbXBvcnQgKgogICAgIGZyb20gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyIGlt
cG9ydCAqCiAgICAgZnJvbSBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBp
bXBvcnQgKgogCkBAIC0xMTksMTQgKzEyOCwyNiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZp
Y2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAgIHByb3RvY29s
LnJlc29sdmVfdHlwZXMoKQogCiAgICAgZ2VuZXJhdG9ycyA9IFtdCi0gICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgZ2VuZXJhdG9ycy5hcHBlbmQo
QmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQotICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAg
IGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgZ2VuZXJh
dG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBw
cmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgIGdlbmVyYXRvcnMuYXBwZW5kKEZy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5
X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgIGdlbmVyYXRvcnMuYXBwZW5kKFByb3RvY29s
VHlwZXNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCkpCi0gICAgZ2VuZXJhdG9ycy5hcHBlbmQoUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAg
IGlzX3Rlc3QgPSBwcm90b2NvbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0CisgICAgaWYg
aXNfdGVzdCBvciBwcm90b2NvbC5mcmFtZXdvcmsgaXMgbm90IEZyYW1ld29ya3MuV2ViSW5zcGVj
dG9yOgorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJp
bWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJv
bnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0
aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoUHJvdG9jb2xUeXBlc0hl
YWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
KyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGlm
IGlzX3Rlc3Qgb3IgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2ViSW5zcGVjdG9y
OgorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkp
CisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDQ29uZmlndXJhdGlv
bkhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25JbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ0NvbnZlcnNpb25IZWxw
ZXJzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQor
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDRnJvbnRlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0
b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChPYmplY3RpdmVDVHlwZXNJbnRlcm5hbEhlYWRlckdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKIAogICAgIHNpbmdsZV9vdXRwdXRf
ZmlsZV9jb250ZW50cyA9IFtdCiAKQEAgLTE1MCw3ICsxNzEsNyBAQCBkZWYgZ2VuZXJhdGVfZnJv
bV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiAK
IGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgYWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMg
PSBbJ0phdmFTY3JpcHRDb3JlJywgJ1Rlc3QnXQorICAgIGFsbG93ZWRfZnJhbWV3b3JrX25hbWVz
ID0gWydKYXZhU2NyaXB0Q29yZScsICdXZWJJbnNwZWN0b3InLCAnVGVzdCddCiAgICAgY2xpX3Bh
cnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25z
XSBQcmltYXJ5UHJvdG9jb2wuanNvbiBbU3VwcGxlbWVudGFsUHJvdG9jb2wuanNvbiAuLi5dIikK
ICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0cHV0RGlyIiwgaGVscD0iRGly
ZWN0b3J5IHdoZXJlIGdlbmVyYXRlZCBmaWxlcyBzaG91bGQgYmUgd3JpdHRlbi4iKQogICAgIGNs
aV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcmFtZXdvcmsiLCB0eXBlPSJjaG9pY2UiLCBjaG9pY2Vz
PWFsbG93ZWRfZnJhbWV3b3JrX25hbWVzLCBoZWxwPSJUaGUgZnJhbWV3b3JrIHRoYXQgdGhlIHBy
aW1hcnkgc3BlY2lmaWNhdGlvbiBiZWxvbmdzIHRvLiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbi1yZXN1bHQKaW5kZXggYmE1YjU1ZS4uNGZiZDFkMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtODMzLDMgKzgzMyw3OTcgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
IAogIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29sRGF0YWJhc2VEb21h
aW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxSV0lQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnkpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8UldJ
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiUldJUHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFJXSVBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxSV0lQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9k
YXRhYmFzZUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZGF0YWJhc2VIYW5kbGVy
IHJlbGVhc2VdOworICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisg
ICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5h
dGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8SW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgV1RGOjptb3Zl
KGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YWdlbnRSZWdpc3RyeSgp
LmFwcGVuZChXVEY6Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8UldJUHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVybiBf
ZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2wuaCIKKworQGludGVyZmFjZSBSV0lQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJSV0lQcm90b2NvbEludGVybmFsLmgi
CisjaW5jbHVkZSAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgfTsKKwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIE5TSW50
ZWdlciAqZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFJX
SVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgUldJUHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmlu
dENvbG9yKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1l
cyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKKyAgICAgICAgaWYgKG5v
dGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJu
b3RlcyIpLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0YW1wKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFt
cCk7CisgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbKnZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0p
OworICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFsqcGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0p
OworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgKmRhdGFiYXNlSWQpOworICAgICAg
ICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJ
SUxpdGVyYWwoInNxbEVycm9yIiksIFsqc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAg
ICAgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5D
b2xvcikpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5n
KCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdE9iamVjdC5yZWxlYXNlKCksIFN0cmluZygpKTsKKyAgICB9OworCisg
ICAgTlNJbnRlZ2VyIG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJp
bmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQg
cXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2Fs
bElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSwgZXJyb3IpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRp
bWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKipwYXlsb2FkLCBOU0ludGVnZXIgKmRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJh
c2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2Ny
ZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCpjb2x1bW5O
YW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICpub3Rlcyk7CisgICAgICAgIGlmICh0aW1l
c3RhbXApCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwo
InRpbWVzdGFtcCIpLCAqdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFsqdmFs
dWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgWypwYXls
b2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIp
LCAqZGF0YWJhc2VJZCk7CisgICAgICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgWypzcWxFcnJvciB0
b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHRv
UHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmIChwcmludENvbG9yKQor
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENv
bG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0T2JqZWN0LnJlbGVhc2UoKSwg
U3RyaW5nKCkpOworICAgIH07CisKKyAgICBOU0ludGVnZXIgb19pbl9kYXRhYmFzZUlkID0gaW5f
ZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAg
W21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcg
Y2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSwgZXJyb3IpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqcGF5bG9hZCwgTlNJbnRlZ2VyIGRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJhc2VF
cnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNv
bG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29s
b3IpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5h
bWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90
ZXMiKSwgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiks
IFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3NxbEVy
cm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50
Q29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdE9iamVjdC5yZWxlYXNlKCks
IFN0cmluZygpKTsKKyAgICB9OworCisgICAgTlNJbnRlZ2VyIG9faW5fZGF0YWJhc2VJZCA9IGlu
X2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAg
IFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFz
ZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAg
fTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBOU0lu
dGVnZXIgZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgUldJ
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVt
bk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0
aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwo
InZhbHVlcyIpLCBbdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFtwYXlsb2FkIHRvSW5zcGVj
dG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVy
YWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3NxbEVycm9yIHRvSW5zcGVjdG9yT2Jq
ZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2Ny
ZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOworICAgICAgICByZXN1
bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90b2Nv
bFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdE9iamVjdC5yZWxlYXNlKCksIFN0cmluZygpKTsKKyAgICB9
OworCisgICAgTlNJbnRlZ2VyIG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAg
TlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1
ZXJ5XTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBS
V0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJv
dG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9uSGVscGVycy5oIgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhT
dHJpbmcgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsK
KyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgorICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJyZWQiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzR3JlZW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImdyZWVuIik7
CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6CisgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImJsdWUiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBmcm9tUHJvdG9jb2xTdHJpbmco
U3RyaW5nIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJu
IFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOworICAgIGlmICh2YWx1ZSA9PSAi
Z3JlZW4iKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNH
cmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKK30KKworaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoImN5YW4iKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKKyAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAo
dmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKKyAgICBp
ZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7CisgICAg
aWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKK30KKworaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiY3lhbiIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxhdGU8
PgoraW5saW5lIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47CisgICAg
aWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOwor
ICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7
CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworfQor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBj
YXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgibWFnZW50YSIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
eWVsbG93Iik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAg
fQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQor
ICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xv
ck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gUldJ
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAo
dmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW47
Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsK
KyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lh
bjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOworICAgIGNhc2UgUldJUHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgieWVsbG93Iik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFj
ayIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0g
Im1hZ2VudGEiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAg
ICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVs
bG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y1ByaW50Q29sb3JDeWFuOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xF
bnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmls
ZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQ
cm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgUldJUHJv
dG9jb2xEYXRhYmFzZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFJXSVBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNSZWQsCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVl
biwKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCit9OworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKKyAgICBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAorICAgIFJX
SVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvck1hZ2VudGEsCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAorfTsKKwor
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFJXSVByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAor
ICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAgUldJUHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNr
LAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikgeworICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JDeWFuLAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJ
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IpIHsKKyAgICBSV0lQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW4sCisgICAgUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFJXSVByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93LAorICAgIFJXSVByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2ssCit9OworCisKK0BpbnRl
cmZhY2UgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZToo
TlNJbnRlZ2VyKWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBOU0ludGVnZXIgY29kZTsKK0BlbmQKKworQHByb3RvY29sIFJXSVByb3RvY29s
RGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9pZClleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91
YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgTlNJbnRlZ2VyICpkYXRhYmFzZUlkLCBSV0lQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKnNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRh
YmFzZUlkOihOU0ludGVnZXIpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0g
KHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFj
azoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
Oih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAq
Km5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBOU0ludGVnZXIgKmRhdGFiYXNlSWQs
IFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3ND
YWxsYmFjayBkYXRhYmFzZUlkOihOU0ludGVnZXIpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcg
KilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZCwgTlNJbnRlZ2VyIGRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0
YWJhc2VFcnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNj
cmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHBy
aW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihOU0ludGVnZXIpZGF0YWJhc2VJ
ZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIE5TSW50ZWdlciBkYXRhYmFz
ZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KE5TSW50ZWdlcilkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworQGVuZAorCisK
KworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sRGF0YWJh
c2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooTlNJbnRlZ2VyKWNvZGU7Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
KyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm1lc3NhZ2Ug
PSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIg
c2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAq
KW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsK
K30KKworLSAodm9pZClzZXRDb2RlOihOU0ludGVnZXIpY29kZQoreworICAgIFtzdXBlciBzZXRJ
bnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChOU0ludGVnZXIpY29kZQorewor
ICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJ
UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2wuaCIKKyNpbXBvcnQgIlJX
SVByb3RvY29sSlNPTk9iamVjdEludGVybmFsLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sSW50
ZXJuYWwuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggZWI2NzY3ZS4uNGU5ZGQxOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CkBAIC03MjQsMyArNzI0LDc2NCBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpIHsKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQogCiAjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxSV0lQcm90b2NvbERhdGFiYXNlRG9tYWluSGFu
ZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcq
IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBTdHJp
bmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxs
SWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7Citw
cml2YXRlOgorICAgIFJldGFpblB0cjxpZDxSV0lQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9y
dCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFJXSVByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxSV0lQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRs
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwor
ICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRl
cm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0
ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8SW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgV1RGOjptb3ZlKGFsdGVybmF0ZURp
c3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YWdlbnRSZWdpc3RyeSgpLmFwcGVuZChXVEY6
Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8UldJUHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5k
bGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxSV0lQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJ
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlJX
SVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9u
SGVscGVycy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlk
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJvciwg
Y29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9y
KQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMs
IGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIE5TSW50ZWdlciAqZGF0YWJhc2VJZCwgUldJUHJv
dG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzICpzY3JlZW5Db2xvciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSB7CisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqY29s
dW1uTmFtZXMpKTsKKyAgICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOworICAgICAgICBpZiAo
dGltZXN0YW1wKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRl
cmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFtcCk7CisgICAgICAgIGlmICh2YWx1ZXMpCisgICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBb
KnZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFsq
cGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNl
SWQiKSwgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFsqc3FsRXJy
b3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIp
LCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAocHJpbnRDb2xv
cikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJp
bnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdE9iamVjdC5yZWxlYXNl
KCksIFN0cmluZygpKTsKKyAgICB9OworCisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2lu
X2NvbHVtbk5hbWVzOworICAgIGlmIChpbl9jb2x1bW5OYW1lcykKKyAgICAgICAgb19pbl9jb2x1
bW5OYW1lcyA9IG9iamNTdHJpbmdBcnJheSgqaW5fY29sdW1uTmFtZXMpOworICAgIE5TU3RyaW5n
ICpvX2luX25vdGVzOworICAgIGlmIChpbl9ub3RlcykKKyAgICAgICAgb19pbl9ub3RlcyA9ICpp
bl9ub3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7CisgICAgaWYgKGluX3RpbWVzdGFt
cCkKKyAgICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOworICAgIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXM7CisgICAgaWYgKGluX3ZhbHVlcykKKyAgICAgICAg
b19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5z
cGVjdG9yT2JqZWN0Oippbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpT
T05PYmplY3QgKm9faW5fcGF5bG9hZDsKKyAgICBpZiAoaW5fcGF5bG9hZCkKKyAgICAgICAgb19p
bl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3Bl
Y3Rvck9iamVjdDoqaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIE5TSW50ZWdlciBvX2lu
X2RhdGFiYXNlSWQ7CisgICAgaWYgKGluX2RhdGFiYXNlSWQpCisgICAgICAgIG9faW5fZGF0YWJh
c2VJZCA9ICppbl9kYXRhYmFzZUlkOworICAgIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqb19p
bl9zcWxFcnJvcjsKKyAgICBpZiAoaW5fc3FsRXJyb3IpCisgICAgICAgIG9faW5fc3FsRXJyb3Ig
PSBbW1tSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2Jq
ZWN0Oippbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIFJXSVByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIG9faW5fc2NyZWVuQ29sb3I7CisgICAgaWYgKGluX3NjcmVlbkNvbG9yKQor
ICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFJXSVByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOworICAgIFJXSVByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBvX2luX3ByaW50
Q29sb3I7CisgICAgaWYgKGluX3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fcHJpbnRDb2xvciA9
IGZyb21Qcm90b2NvbFN0cmluZzxSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRl
IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVt
bk5hbWVzID8gJm9faW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2lu
X25vdGVzIDogbmlsKSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6
IG5pbCkgdmFsdWVzOihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGlu
X3BheWxvYWQgPyAmb19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlk
ID8gJm9faW5fZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5f
c3FsRXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVl
bkNvbG9yIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9faW5fcHJpbnRDb2xv
ciA6IG5pbCldOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBp
bl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3Is
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgIH07
CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgTlNJbnRl
Z2VyIGRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFJXSVBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwor
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5v
dGVzKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1l
c3RhbXAiKSwgdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJ2YWx1ZXMiKSwgW3ZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbcGF5bG9h
ZCB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQpOworICAgICAgICByZXN1bHRP
YmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFtzcWxFcnJvciB0b0lu
c3BlY3Rvck9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKKyAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiks
IHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHRPYmplY3QucmVsZWFzZSgpLCBTdHJpbmco
KSk7CisgICAgfTsKKworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1l
cyA9IG9iamNTdHJpbmdBcnJheShpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcgKm9faW5f
bm90ZXMgPSBpbl9ub3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1lc3Rh
bXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3Rv
Y29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6aW5fdmFsdWVzXSBh
dXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBb
W1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Omlu
X3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAgICBOU0ludGVnZXIgb19pbl9kYXRhYmFzZUlkID0g
aW5fZGF0YWJhc2VJZDsKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJy
b3IgPSBbW1tSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9y
T2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxSV0lQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOworICAgIFJXSVBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIG9faW5f
cHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oaW5fcHJpbnRDb2xvcik7CisKKyAgICBb
bV9kZWxlZ2F0ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6
b19pbl9jb2x1bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2luX3RpbWVzdGFt
cCB2YWx1ZXM6b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJhc2VJZDpvX2lu
X2RhdGFiYXNlSWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xvcjpvX2luX3NjcmVl
bkNvbG9yIHByaW50Q29sb3I6b19pbl9wcmludENvbG9yXTsKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbkhl
bHBlcnMuaCIKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVl
KTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBS
V0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgicmVkIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
c0dyZWVuOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJncmVlbiIpOworICAgIGNhc2Ug
UldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJibHVlIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKKyAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKKyAg
ICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47CisgICAg
aWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzQmx1ZTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
UldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7Cit9CisKK2lubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2Fz
ZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBS
V0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2Fz
ZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JZZWxsb3c6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNh
c2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAgfQor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47CisgICAg
aWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYg
KHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1
ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBSV0lQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBSV0lQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgUldJUHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0
ZTw+CitpbmxpbmUgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09
ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5
ZWxsb3ciKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2si
KQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckN5YW47Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiY3lhbiIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgieWVsbG93Iik7CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Q
cm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikK
KyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAg
ICByZXR1cm4gUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0
dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gUldJ
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFj
azsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUldJUHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworfQorCitpbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7
CisgICAgY2FzZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKKyAg
ICBjYXNlIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOwor
ICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwor
ICAgIGNhc2UgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBSV0lQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Cisg
ICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBp
ZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFs
dWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQ3lhbjsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9y
OworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzKSB7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQsCisg
ICAgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAgICBSV0lQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3IpIHsKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCisgICAgUldJUHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93LAorICAgIFJXSVBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNr
LAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgUldJUHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBS
V0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhLAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yKSB7CisgICAgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAgICBSV0lQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBSV0lQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNr
LAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKKyAgICBSV0lQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgUldJ
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdl
bnRhLAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yWWVsbG93LAorICAgIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCisKK0BpbnRlcmZhY2UgUldJUHJvdG9j
b2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooTlNJbnRlZ2VyKWNvZGU7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1l
c3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU0lu
dGVnZXIgY29kZTsKK0BlbmQKKworQHByb3RvY29sIFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9pZClleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9h
ZCwgTlNJbnRlZ2VyICpkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxF
cnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBSV0lQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnBy
aW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRv
dWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMg
cGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooTlNJ
bnRlZ2VyICopZGF0YWJhc2VJZCBzcWxFcnJvcjooUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
KXNxbEVycm9yIHNjcmVlbkNvbG9yOihSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAq
KXNjcmVlbkNvbG9yIHByaW50Q29sb3I6KFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqKXByaW50Q29sb3I7CistICh2b2lkKWV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5T
U3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpw
YXlsb2FkLCBOU0ludGVnZXIgZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpz
cWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJX
SVByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHBy
aW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDooTlNJbnRlZ2Vy
KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9y
IHNjcmVlbkNvbG9yOihSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycylzY3JlZW5Db2xv
ciBwcmludENvbG9yOihSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworQGVuZAorCisKKworCisjIyMgRW5kIEZpbGU6IFJX
SVByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbERhdGFiYXNlRXJy
b3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGNvZGU6KE5TSW50ZWdlciljb2RlOworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5tZXNzYWdlID0gbWVz
c2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKiltZXNz
YWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9CisK
Ky0gKHZvaWQpc2V0Q29kZTooTlNJbnRlZ2VyKWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdl
cjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoTlNJbnRlZ2VyKWNvZGUKK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgor
I2ltcG9ydCAiUldJUHJvdG9jb2xKU09OT2JqZWN0SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJ
UHJvdG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0CmluZGV4IGM3YTZhMTQuLjkyN2Q5ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CkBAIC03MjIsMyArNzIyLDYyNSBAQCBTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQogCiAjIyMgRW5kIEZpbGU6IEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBSV0lQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcjsKK0Bwcm90b2NvbCBSV0lQcm90b2NvbE5ldHdvcmsyRG9tYWlu
SGFuZGxlcjsKK0Bwcm90b2NvbCBSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcjsKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoaWQ8UldJUHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRs
ZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxS
V0lQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCisKKwor
Y2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoaWQ8UldJUHJvdG9j
b2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJZCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgor
ICAgIFJldGFpblB0cjxpZDxSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4+IG1fZGVs
ZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBS
V0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
UldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKKyAgICBpZDxSV0lQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25l
dHdvcmsxSGFuZGxlcjsKKyAgICBpZDxSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4g
X25ldHdvcmszSGFuZGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19uZXR3b3JrMUhh
bmRsZXIgcmVsZWFzZV07CisgICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldE5ldHdvcmsxSGFuZGxlcjooaWQ8UldJUHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9
PSBfbmV0d29yazFIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmsxSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
KworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0lu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0
ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
PEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIFdURjo6
bW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFnZW50UmVnaXN0
cnkoKS5hcHBlbmQoV1RGOjptb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFJXSVBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3b3JrMUhhbmRsZXIKK3sKKyAgICByZXR1
cm4gX25ldHdvcmsxSGFuZGxlcjsKK30KKworLSAodm9pZClzZXROZXR3b3JrM0hhbmRsZXI6KGlk
PFJXSVByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhh
bmRsZXIgPT0gX25ldHdvcmszSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19uZXR3
b3JrM0hhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmszSGFuZGxlciA9IFtoYW5kbGVyIHJl
dGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBh
dXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudDxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIp
LCBXVEY6Om1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hZ2Vu
dFJlZ2lzdHJ5KCkuYXBwZW5kKFdURjo6bW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChp
ZDxSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4pbmV0d29yazNIYW5kbGVyCit7Cisg
ICAgcmV0dXJuIF9uZXR3b3JrM0hhbmRsZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRl
cmZhY2UgUldJUHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxSV0lQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFJXSVByb3RvY29s
TmV0d29yazNEb21haW5IYW5kbGVyPiBuZXR3b3JrM0hhbmRsZXI7CitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogUldJ
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlJX
SVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9u
SGVscGVycy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkKK3sKKyAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3Ip
OworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpLCBTdHJpbmcoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOworfQorCisKKworCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKQoreworICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7Cisg
ICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCks
IFN0cmluZygpKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICB9OworCisg
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgU3RyaW5nKCkp
OworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwor
dm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
Myhsb25nIGNhbGxJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgIH07CisKKyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBTdHJpbmcoKSk7CisgICAgfTsK
KworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgY2Fs
bElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQs
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsKKyAgICB9OworCisgICAgW21f
ZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpCit7Cisg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCksIGVycm9yKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSwgU3RyaW5nKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBs
b2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIGNhbGxJZCkKK3sKKyAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJy
b3IpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpLCBTdHJpbmcoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAg
fTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0
cmluZygpKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29s
RW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9uSGVscGVycy5oIgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhT
dHJpbmcgdmFsdWUpOworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJS
V0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKwor
CisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgUldJUHJvdG9jb2xOZXR3b3JrMURvbWFp
bkhhbmRsZXIgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitAcHJvdG9j
b2wgUldJUHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQHJlcXVpcmVk
CistICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vz
c0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KSgpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTRXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVz
b3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZv
aWQpbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJv
cikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJh
Y2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0
cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3Vj
Y2Vzc0NhbGxiYWNrOworQGVuZAorCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sLmgK
KworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQ
cm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8
d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKwor
CisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFJXSVByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlJXSVByb3RvY29sSlNPTk9iamVjdEludGVybmFsLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFJX
SVByb3RvY29sSW50ZXJuYWwuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJl
c3VsdAppbmRleCA4M2EwZDkxLi5hNTA1Y2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdApAQCAtNTY0LDMgKzU2NCw1NDcgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKIAogIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgUldJUHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNp
bXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitA
aW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBSV0lQcm90b2NvbERhdGFi
YXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsK
KyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChSV0lQcm90b2NvbERhdGFiYXNlRG9tYWlu
RXZlbnREaXNwYXRjaGVyICopZGF0YWJhc2VFdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9k
YXRhYmFzZUV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVy
ID0gW1tSV0lQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0
V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZGF0YWJhc2VFdmVudERp
c3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgUldJ
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVudERpc3Bh
dGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSV0lQ
cm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVs
cGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbkhlbHBlcnMuaCIK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKTsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRW51
bUNvbnZlcnNpb25IZWxwZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJz
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xEYXRhYmFzZURv
bWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNX
aXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3Rl
czooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKiop
c3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIHByaW50Q29sb3I6
KE5TU3RyaW5nICoqKXByaW50Q29sb3IKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGZyb250ZW5kQ2hhbm5lbCA9IF9jb250cm9sbGVyLT5mcm9udGVuZENoYW5uZWwoKTsKKyAgICBp
ZiAoIWZyb250ZW5kQ2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRl
cmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKCpjb2x1
bW5OYW1lcykpKTsKKyAgICBpZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKCpub3RlcykpOworICAgIGlmICh0aW1lc3RhbXAp
CisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1w
IiksICgqdGltZXN0YW1wKSk7CisgICAgaWYgKHZhbHVlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgWygqdmFsdWVzKSB0b0luc3BlY3Rv
ck9iamVjdF0pOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbKCpwYXlsb2FkKSB0b0luc3BlY3Rvck9iamVj
dF0pOworICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbKCpzcWxFcnJvcikgdG9JbnNwZWN0b3JPYmplY3Rd
KTsKKyAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgKCpzY3JlZW5Db2xvcikpOworICAgIGlmIChw
cmludENvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InByaW50Q29sb3IiKSwgKCpwcmludENvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOworICAgIGZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Cit9CisKKy0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcg
Kilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9h
ZCBzcWxFcnJvcjooUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29s
b3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENv
bG9yCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwgPSBf
Y29udHJvbGxlci0+ZnJvbnRlbmRDaGFubmVsKCk7CisgICAgaWYgKCFmcm9udGVuZENoYW5uZWwp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoQVND
SUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKKyAgICBwYXJhbXNPYmplY3QtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0
XSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwg
W3BheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFtzcWxFcnJvciB0b0luc3BlY3Rvck9iamVjdF0p
OworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3Ii
KSwgc2NyZWVuQ29sb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7CisgICAgZnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdC5oPgorCisKK0BjbGFzcyBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKKworCisK
K0BpbnRlcmZhY2UgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
Y29kZTooTlNJbnRlZ2VyKWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBOU0ludGVnZXIgY29kZTsKK0BlbmQKKworCisKK0BpbnRlcmZhY2Ug
UldJUHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2
b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVy
cm9yOihSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5T
U3RyaW5nICoqKXNjcmVlbkNvbG9yIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7
CistICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90
ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3Fs
RXJyb3I6KFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihO
U1N0cmluZyAqKXNjcmVlbkNvbG9yIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcjsK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6
IFJXSVByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJ
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9u
SGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9j
b2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihOU0ludGVnZXIpY29kZTsKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYu
bWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAg
IFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5T
U3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVz
c2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KE5TSW50ZWdlciljb2RlCit7CisgICAgW3N1
cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKE5TSW50ZWdlcilj
b2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisj
aW1wb3J0ICJSV0lQcm90b2NvbEpTT05PYmplY3RJbnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworQGludGVyZmFjZSBSV0lQcm90b2NvbERh
dGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEludGVy
bmFsLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0
CmluZGV4IGFlNzMwM2EuLmMzNTA5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtNjEzLDMgKzYxMyw1NzUgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
IAogIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBSV0lQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcjsKK0Bwcm90b2NvbCBSV0lQcm90b2NvbE5ldHdvcmsyRG9tYWluSGFu
ZGxlcjsKK0Bwcm90b2NvbCBSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcjsKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKK2NsYXNz
IE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFs
dGVybmF0ZUluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFJXSVByb3RvY29sTmV0
d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgb3ZlcnJpZGU7Citwcml2
YXRlOgorICAgIFJldGFpblB0cjxpZDxSV0lQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+
IG1fZGVsZWdhdGU7Cit9OworI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKworCisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgor
I2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZp
Z3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOworICAgIGlkPFJXSVByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBfbmV0d29yazFI
YW5kbGVyOworICAgIFJXSVByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKl9u
ZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19uZXR3
b3JrMUhhbmRsZXIgcmVsZWFzZV07CisgICAgW19uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlciByZWxl
YXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazFIYW5k
bGVyOihpZDxSV0lQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAg
IGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7
CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQ8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJu
YXRlSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiTmV0
d29yazEiKSwgV1RGOjptb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxl
ci0+YWdlbnRSZWdpc3RyeSgpLmFwcGVuZChXVEY6Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30K
KworLSAoaWQ8UldJUHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFuZGxl
cgoreworICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOworfQorCistIChSV0lQcm90b2NvbE5l
dHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKK3sK
KyAgICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmszRXZl
bnREaXNwYXRjaGVyID0gW1tSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVy
IGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfbmV0
d29yazNFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2wuaCIKKworQGludGVyZmFj
ZSBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFJXSVByb3RvY29sTmV0
d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFJXSVByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKm5l
dHdvcmszRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlJXSVByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKK3ZvaWQgT2JqQ0luc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkKK3sKKyAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSwgZXJyb3IpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpLCBTdHJpbmcoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFja107Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMp
CisKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJ
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3Rv
Y29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25IZWxwZXJzLmgiCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3Ry
aW5nKFN0cmluZyB2YWx1ZSk7CisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworCisKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sTmV0d29yazNEb21haW5FdmVudERp
c3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Cit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNv
bnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClyZXNvdXJjZUxvYWRlZAoreworICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogZnJvbnRlbmRDaGFubmVsID0gX2NvbnRyb2xsZXItPmZyb250ZW5kQ2hhbm5lbCgp
OworICAgIGlmICghZnJvbnRlbmRDaGFubmVsKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBB
U0NJSUxpdGVyYWwoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIikpOworICAgIGZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBSV0lQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vy
cm9yOworCisKKworCitAaW50ZXJmYWNlIFJXSVByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3Ig
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihOU0ludGVnZXIpY29kZTsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TSW50ZWdlciBjb2RlOworQGVu
ZAorCitAcHJvdG9jb2wgUldJUHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgorQHJlcXVpcmVkCistICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lk
KF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQo
XikoKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK0BpbnRlcmZhY2UgUldJUHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKXJlc291cmNlTG9h
ZGVkOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2wuaAorCisjIyMgQmVnaW4g
RmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVt
Q29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZh
bHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKK0BpbXBsZW1lbnRh
dGlvbiBSV0lQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yCisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihOU0ludGVnZXIpY29kZTsK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0g
Y29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJt
ZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KE5TSW50
ZWdlciljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07
Cit9CisKKy0gKE5TSW50ZWdlciljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9y
S2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9j
b2xUeXBlcy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEpTT05PYmpl
Y3RJbnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KKworQGludGVyZmFjZSBSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVy
IChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9y
OjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdAppbmRleCA4NzRlODZhLi4yZWE5MjA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CkBAIC00MzIsMyArNDMyLDQzOCBAQCBTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQogCiAjIyMgRW5kIEZpbGU6IEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgUldJUHJvdG9jb2xSdW50aW1lRG9t
YWluSGFuZGxlcjsKK0Bwcm90b2NvbCBSV0lQcm90b2NvbFJ1bnRpbWUyRG9tYWluSGFuZGxlcjsK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0
ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlJXSVByb3RvY29sSW50ZXJuYWwu
aCIKKyNpbmNsdWRlICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBS
V0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJv
dG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9uSGVscGVycy5oIgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhT
dHJpbmcgdmFsdWUpOworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFJXSVByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2Nv
bEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBF
bmQgRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBSV0lQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisK
KworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJS
V0lQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNp
b25IZWxwZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
KyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBS
V0lQcm90b2NvbFR5cGVzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEludGVybmFs
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xKU09OT2Jq
ZWN0SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAppbmRleCA4NDQ4OGMzLi45ZTIwNTY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTUwOCwzICs1MDgs
NTA2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCiAKICMjIyBFbmQgRmlsZTogSW5zcGVjdG9yUHJvdG9jb2xPYmpl
Y3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgUldJ
UHJvdG9jb2xSdW50aW1lRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dl
ZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW1w
b3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sQ29uZmlndXJh
dGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9s
bGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2Nv
bC5oIgorCitAaW50ZXJmYWNlIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMg
QmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlJXSVByb3RvY29sRW51
bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25IZWxwZXJzLmgiCisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51
bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSk7CisKKworaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHZhbHVlKQor
eworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGVOdWxsOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJudWxsIik7CisgICAgY2Fz
ZSBSV0lQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzoKKyAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgic3RyaW5nIik7CisgICAgY2FzZSBSV0lQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZUFycmF5OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJhcnJheSIpOworICAgIH0K
K30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIGZy
b21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJudWxs
IikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbDsKKyAg
ICBpZiAodmFsdWUgPT0gInN0cmluZyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZVN0cmluZzsKKyAgICBpZiAodmFsdWUgPT0gImFycmF5IikKKyAgICAgICAg
cmV0dXJuIFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVs
bDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJv
dG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJ
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9u
SGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgUldJUHJvdG9jb2xSdW50aW1l
S2V5UGF0aDsKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZSkgeworICAgIFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbCwK
KyAgICBSV0lQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZywKKyAgICBSV0lQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5LAorfTsKKworCitAaW50ZXJmYWNlIFJXSVByb3RvY29s
UnVudGltZUtleVBhdGggOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFR5cGU6KFJXSVByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGU7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBSV0lQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZSB0eXBlOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TU3RyaW5nICpzdHJpbmc7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICphcnJheTsKK0BlbmQKKworCisKKworCisK
KyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9j
b2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50
ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sUnVudGltZUtl
eVBhdGgKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooUldJUHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGUpdHlwZTsKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYudHlwZSA9IHR5cGU7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRUeXBlOihSV0lQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZSl0eXBlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5n
KHR5cGUpIGZvcktleTpAInR5cGUiXTsKK30KKworLSAoUldJUHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGUpdHlwZQoreworICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8UldJUHJvdG9jb2xS
dW50aW1lS2V5UGF0aFR5cGU+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ0eXBlIl0pOworfQorCist
ICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3Ry
aW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcK
K3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2
b2lkKXNldEFycmF5OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhcnJheQoreworICAgIFtzdXBl
ciBzZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0b3JTdHJpbmdBcnJheShhcnJheSkgZm9yS2V5OkAi
YXJyYXkiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkKK3sKKyAgICBy
ZXR1cm4gb2JqY1N0cmluZ0FycmF5KFtzdXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpAImFycmF5
Il0pOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSlNPTk9iamVjdEludGVybmFsLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5k
IEZpbGU6IFJXSVByb3RvY29sSW50ZXJuYWwuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNGFmNWMyYi4uZDViYzIzYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0
CkBAIC00MjcsMyArNDI3LDQyNyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQogCiAjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29sUnVudGltZURvbWFpbkhhbmRsZXI7CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2lt
cG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0Bp
bXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2wuaCIKKworQGludGVy
ZmFjZSBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFJX
SVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSV0lQcm90b2NvbEVudW1Db252
ZXJzaW9uSGVscGVycy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlJXSVByb3RvY29sQXJyYXlDb252ZXJzaW9uSGVscGVycy5oIgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2Jq
Q0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpOworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xFbnVtQ29udmVy
c2lvbkhlbHBlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVy
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKwor
IyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVs
cGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2Nv
bFR5cGVzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2wuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSlNPTk9i
amVjdEludGVybmFsLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sSW50ZXJuYWwuaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggYTY2MGQzOS4uYjY0ZGQ4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC00NTAsMyArNDUwLDQ2NyBAQCBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQogCiAjIyMgRW5kIEZpbGU6IEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29sRGVidWdn
ZXJEb21haW5IYW5kbGVyOworQHByb3RvY29sIFJXSVByb3RvY29sUnVudGltZURvbWFpbkhhbmRs
ZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBv
cnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1w
bGVtZW50YXRpb24gUldJUHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJSV0lQcm90b2NvbEludGVybmFsLmgi
CisjaW5jbHVkZSAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJ
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3Rv
Y29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25IZWxwZXJzLmgiCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKFN0cmlu
ZyB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29s
RGVidWdnZXJSZWFzb24gdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBS
V0lQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiRGllZCIpOworICAgIGNhc2UgUldJUHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZhaW50ZWQiKTsKKyAgICBjYXNlIFJXSVByb3Rv
Y29sRGVidWdnZXJSZWFzb25IdW5ncnk6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkh1
bmdyeSIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVByb3RvY29sRGVidWdn
ZXJSZWFzb24gZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gIkRpZWQiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRp
ZWQ7CisgICAgaWYgKHZhbHVlID09ICJGYWludGVkIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3Rv
Y29sRGVidWdnZXJSZWFzb25GYWludGVkOworICAgIGlmICh2YWx1ZSA9PSAiSHVuZ3J5IikKKyAg
ICAgICAgcmV0dXJuIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnk7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25EaWVk
OworfQorCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJ
UHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJ
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9u
SGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgUldJUHJvdG9jb2xEZWJ1Z2dlclJlYXNvbikgeworICAgIFJXSVByb3RvY29sRGVi
dWdnZXJSZWFzb25EaWVkLAorICAgIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkLAor
ICAgIFJXSVByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnksCit9OworCisKKworCisKKworCisK
KyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9j
b2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sVHlwZXMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQ
cm90b2NvbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xKU09OT2JqZWN0SW50ZXJuYWwuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBF
bmQgRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1y
ZXN1bHQKaW5kZXggODhkYzA0OS4uMDg2ZDhiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
LXJlc3VsdApAQCAtNDU2LDMgKzQ1Niw0OTcgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKSB7CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKIAogIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworQHByb3RvY29sIFJXSVByb3RvY29sUnVudGltZURvbWFpbkhhbmRsZXI7CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbElu
dGVybmFsLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSV0lQcm90
b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25IZWxwZXJzLmgiCisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpD
RW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSk7CisKKworaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVl
KQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9jb2xSdW50aW1lRmFy
bUFuaW1hbHNQaWdzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJQaWdzIik7CisgICAg
Y2FzZSBSV0lQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M6CisgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoIkNvd3MiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzQ2F0czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ2F0cyIpOworICAgIGNhc2Ug
UldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJIZW5zIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHMgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xSdW50
aW1lRmFybUFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAgIHJl
dHVybiBSV0lQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M7CisgICAgaWYgKHZhbHVlID09
ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0
czsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xS
dW50aW1lRmFybUFuaW1hbHNIZW5zOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBSV0lQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M7Cit9CisKK2lubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZh
bHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJEdWNr
cyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM6Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkhlbnMiKTsKKyAgICBjYXNlIFJXSVByb3RvY29s
UnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiQ3Jvd3MiKTsKKyAgICBjYXNlIFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNG
bGFtaW5nb3M6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZsYW1pbmdvcyIpOworICAg
IH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHMgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gIkR1Y2tzIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHNEdWNrczsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gUldJ
UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVlID09ICJD
cm93cyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxz
Q3Jvd3M7CisgICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4gUldJ
UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvczsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUldJUHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0R1Y2tzOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBS
V0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJX
SVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lv
bkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBSV0lQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscykgeworICAgIFJXSVByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzUGlncywKKyAgICBSV0lQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nv
d3MsCisgICAgUldJUHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzLAorICAgIFJXSVByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzSGVucywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKKyAgICBSV0lQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3MsCisgICAgUldJUHJvdG9jb2xSdW50aW1lVHdv
TGVnZ2VkQW5pbWFsc0hlbnMsCisgICAgUldJUHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0Nyb3dzLAorICAgIFJXSVByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3Ms
Cit9OworCisKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2wuaAorCisjIyMg
QmVnaW4gRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252
ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBS
V0lQcm90b2NvbFR5cGVzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEludGVybmFs
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xKU09OT2JqZWN0
SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmluZGV4IGE1NTVkOGUuLjAyOWVmOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC04ODksMyArODg5LDgyMCBAQCBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQogCiAjIyMgRW5kIEZpbGU6IEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBSV0lQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcjsKK0Bwcm90b2NvbCBSV0lQcm90b2NvbFRlc3REb21haW5IYW5kbGVy
OworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9y
dCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiUldJUHJvdG9jb2xJbnRlcm5hbC5o
IgorI2luY2x1ZGUgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJX
SVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90
b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbEFycmF5Q29u
dmVyc2lvbkhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoU3Ry
aW5nIHZhbHVlKTsKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVu
dW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQg
RmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBS
V0lQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBSV0lQ
cm90b2NvbERhdGFiYXNlRXJyb3I7CitAY2xhc3MgUldJUHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlOworQGNsYXNzIFJXSVByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGU7CitAY2xhc3MgUldJUHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25m
bGljdHM7CitAY2xhc3MgUldJUHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0OworQGNsYXNzIFJX
SVByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZTsKKworCisKKworQGludGVyZmFjZSBSV0lQcm90
b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihOU0ludGVnZXIpY29k
ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
bWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5T
SW50ZWdlciBjb2RlOworQGVuZAorCitAaW50ZXJmYWNlIFJXSVByb3RvY29sRGF0YWJhc2VPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29s
dW1uTmFtZXM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNT
dHJpbmcgKm5vdGVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgZG91YmxlIHRpbWVzdGFtcDsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOworLyogb3B0aW9uYWwgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXls
b2FkOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJv
dG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBSV0lQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29s
dW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0
YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFJXSVByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKWVycm9yOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKK0BlbmQK
KworQGludGVyZmFjZSBSV0lQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNv
bmZsaWN0cyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0
cmluZyAqKW9iamVjdDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqaW50ZWdlcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKK0BlbmQKKworQGludGVyZmFj
ZSBSV0lQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
K0BlbmQKKworQGludGVyZmFjZSBSV0lQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3Rl
cyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJv
cjooUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3I7CisvKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1l
czsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
bm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3Vi
bGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
bikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7Cisv
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbERh
dGFiYXNlRXJyb3IgKmVycm9yOworQGVuZAorCisKKworCisKKworIyMjIEVuZCBGaWxlOiBSV0lQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbFR5cGVzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
UldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBv
cnQgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
QGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooTlNJbnRlZ2VyKWNv
ZGU7Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29k
ZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5
OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4g
W3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihO
U0ludGVnZXIpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29k
ZSJdOworfQorCistIChOU0ludGVnZXIpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdl
ckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCisKKy0gKHZvaWQpc2V0Q29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgW3N1cGVyIHNl
dEluc3BlY3RvckFycmF5Omluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6
QCJjb2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcworeworICAgIHJldHVybiBvYmpjU3RyaW5nQXJyYXkoW3N1cGVyIGluc3BlY3RvckFycmF5
Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07
Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0
YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1w
Il07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJs
ZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9y
S2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwor
eworICAgIHJldHVybiAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopW3N1cGVyIG9iamVjdEZvcktl
eTpAInZhbHVlcyJdOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAi
cGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7Cisg
ICAgcmV0dXJuIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
cGF5bG9hZCJdOworfQorCistICh2b2lkKXNldEVycm9yOihSV0lQcm90b2NvbERhdGFiYXNlRXJy
b3IgKillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3Ii
XTsKK30KKworLSAoUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICByZXR1
cm4gKFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKVtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJv
ciJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0
aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjoo
UldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3I7Cit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmNv
bHVtbk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAgc2VsZi5ub3RlcyA9IG5vdGVzOworICAgIHNl
bGYudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOworICAg
IHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAgc2VsZi5lcnJvciA9IGVycm9yOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omlu
c3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOwor
fQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVy
biBvYmpjU3RyaW5nQXJyYXkoW3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiY29sdW1uTmFt
ZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBb
c3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5n
ICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9
CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVy
IHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJs
ZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFt
cCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9
CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIHJldHVybiAoUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOworfQor
CistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sK
KyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCist
IChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgcmV0dXJuIChSV0lQcm90
b2NvbEpTT05PYmplY3QgKilbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworfQorCist
ICh2b2lkKXNldEVycm9yOihSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAg
IFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoUldJUHJv
dG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICByZXR1cm4gKFJXSVByb3RvY29sRGF0
YWJhc2VFcnJvciAqKVtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOworfQorCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAq
KWludGVnZXIgYXJyYXk6KE5TU3RyaW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0Oworewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgc2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsKKyAgICBzZWxmLmFycmF5ID0gYXJy
YXk7CisgICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7CisgICAgc2VsZi52YWx1ZSA9IHZhbHVlOwor
ICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpc2V0SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyCit7CisgICAgW3N1cGVyIHNldFN0cmlu
ZzppbnRlZ2VyIGZvcktleTpAImludGVnZXIiXTsKK30KKworLSAoTlNTdHJpbmcgKilpbnRlZ2Vy
Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0g
KHZvaWQpc2V0QXJyYXk6KE5TU3RyaW5nICopYXJyYXkKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5n
OmFycmF5IGZvcktleTpAImFycmF5Il07Cit9CisKKy0gKE5TU3RyaW5nICopYXJyYXkKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImFycmF5Il07Cit9CisKKy0gKHZvaWQpc2V0
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5n
IGZvcktleTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0VmFs
dWU6KE5TU3RyaW5nICopdmFsdWUKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVlIGZvcktl
eTpAInZhbHVlIl07Cit9CisKKy0gKE5TU3RyaW5nICopdmFsdWUKK3sKKyAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAInZhbHVlIl07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihOU1N0
cmluZyAqKW9iamVjdAoreworICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktleTpAIm9i
amVjdCJdOworfQorCistIChOU1N0cmluZyAqKW9iamVjdAoreworICAgIHJldHVybiBbc3VwZXIg
c3RyaW5nRm9yS2V5OkAib2JqZWN0Il07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFJX
SVByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdAorCitAZW5kCisKKworQGltcGxlbWVudGF0aW9u
IFJXSVByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6
KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXBheWxvYWQgZXJyb3I6KFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOworewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOworICAgIHNlbGYubm90
ZXMgPSBub3RlczsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBzZWxmLnZh
bHVlcyA9IHZhbHVlczsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOworICAgIHNlbGYuZXJy
b3IgPSBlcnJvcjsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENvbHVtbk5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIFtzdXBlciBz
ZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5
OkAiY29sdW1uTmFtZXMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1u
TmFtZXMKK3sKKyAgICByZXR1cm4gb2JqY1N0cmluZ0FycmF5KFtzdXBlciBpbnNwZWN0b3JBcnJh
eUZvcktleTpAImNvbHVtbk5hbWVzIl0pOworfQorCistICh2b2lkKXNldE5vdGVzOihOU1N0cmlu
ZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJd
OworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVz
dGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFt
cCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3Vi
bGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZv
cktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMK
K3sKKyAgICByZXR1cm4gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKVtzdXBlciBvYmplY3RGb3JL
ZXk6QCJ2YWx1ZXMiXTsKK30KKworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilwYXlsb2FkCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpA
InBheWxvYWQiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAorewor
ICAgIHJldHVybiAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopW3N1cGVyIG9iamVjdEZvcktleTpA
InBheWxvYWQiXTsKK30KKworLSAodm9pZClzZXRFcnJvcjooUldJUHJvdG9jb2xEYXRhYmFzZUVy
cm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9y
Il07Cit9CisKKy0gKFJXSVByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgcmV0
dXJuIChSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKilbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJy
b3IiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQor
CisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90
b2NvbC5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xKU09OT2JqZWN0SW50ZXJuYWwuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQg
RmlsZTogUldJUHJvdG9jb2xJbnRlcm5hbC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24t
cmVzdWx0CmluZGV4IGUwOWU1NWYuLmFjYjVjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24tcmVzdWx0CkBAIC03ODksMyArNzg5LDYxMSBAQCB2b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFz
RQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCiAKICMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHBy
b3RvY29sIFJXSVByb3RvY29sVGVzdERvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBS
V0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xDb25m
aWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNv
bnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMj
IEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90
b2NvbC5oIgorCitAaW50ZXJmYWNlIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisj
IyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSV0lQcm90b2NvbEVu
dW1Db252ZXJzaW9uSGVscGVycy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZh
bHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJSV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbkhlbHBlcnMuaCIKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVt
VHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzIHZhbHVlKQor
eworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgUldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRB
bmltYWxzUGlnczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiUGlncyIpOworICAgIGNh
c2UgUldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiQ293cyIpOworICAgIGNhc2UgUldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmlt
YWxzQ2F0czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ2F0cyIpOworICAgIGNhc2Ug
UldJUHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiSGVucyIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFscyBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFRl
c3RVbmNhc3RlZEFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAg
IHJldHVybiBSV0lQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOworICAgIGlmICh2YWx1
ZSA9PSAiQ2F0cyIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1h
bHNDYXRzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBSV0lQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBSV0lQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOworfQorCitpbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHNEdWNrczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRHVja3MiKTsK
KyAgICBjYXNlIFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOgorICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJIZW5zIik7CisgICAgY2FzZSBSV0lQcm90b2NvbFRlc3RDYXN0ZWRB
bmltYWxzQ3Jvd3M6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkNyb3dzIik7CisgICAg
Y2FzZSBSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOgorICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJGbGFtaW5nb3MiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhTdHJp
bmcgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCisgICAgICAgIHJldHVybiBS
V0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M7CisgICAgaWYgKHZhbHVlID09ICJIZW5z
IikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOworICAg
IGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xUZXN0Q2Fz
dGVkQW5pbWFsc0Nyb3dzOworICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKKyAgICAgICAg
cmV0dXJuIFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNE
dWNrczsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJ
UHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJX
SVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lv
bkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBSV0lQcm90b2NvbFRlc3RUeXBl
TmVlZGluZ0Nhc3Q7CitAY2xhc3MgUldJUHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKK0Bj
bGFzcyBSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyOworCisKK3R5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFJXSVByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscykgeworICAgIFJXSVBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCisgICAgUldJUHJvdG9jb2xUZXN0VW5jYXN0
ZWRBbmltYWxzQ293cywKKyAgICBSV0lQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzLAor
ICAgIFJXSVByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9OworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKSB7CisgICAgUldJ
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzLAorICAgIFJXSVByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHNIZW5zLAorICAgIFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93cywKKyAg
ICBSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zLAorfTsKKworCitAaW50ZXJm
YWNlIFJXSVByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1i
ZXI6KE5TSW50ZWdlciludW1iZXIgYW5pbWFsczooUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cylhbmltYWxzIGlkZW50aWZpZXI6KE5TSW50ZWdlcilpZGVudGlmaWVyIHRyZWU6KFJXSVByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7CisvKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU0ludGVnZXIgbnVtYmVyOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgUldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5p
bWFscyBhbmltYWxzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgTlNJbnRlZ2VyIGlkZW50aWZpZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluKSBSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICp0cmVlOworQGVu
ZAorCitAaW50ZXJmYWNlIFJXSVByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4pIFJXSVByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKK0BlbmQKKworQGludGVy
ZmFjZSBSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICpvYmo7CitAZW5kCisKKworCisKKworCisjIyMgRW5k
IEZpbGU6IFJXSVByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sVHlwZXMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVt
YmVyOihOU0ludGVnZXIpbnVtYmVyIGFuaW1hbHM6KFJXSVByb3RvY29sVGVzdENhc3RlZEFuaW1h
bHMpYW5pbWFscyBpZGVudGlmaWVyOihOU0ludGVnZXIpaWRlbnRpZmllciB0cmVlOihSV0lQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZTsKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuc3Ry
aW5nID0gc3RyaW5nOworICAgIHNlbGYubnVtYmVyID0gbnVtYmVyOworICAgIHNlbGYuYW5pbWFs
cyA9IGFuaW1hbHM7CisgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBzZWxm
LnRyZWUgPSB0cmVlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktl
eTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0TnVtYmVyOihO
U0ludGVnZXIpbnVtYmVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6bnVtYmVyIGZvcktleTpA
Im51bWJlciJdOworfQorCistIChOU0ludGVnZXIpbnVtYmVyCit7CisgICAgcmV0dXJuIFtzdXBl
ciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Cit9CisKKy0gKHZvaWQpc2V0QW5pbWFsczooUldJ
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCit7CisgICAgW3N1cGVyIHNldFN0cmlu
Zzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpAImFuaW1hbHMiXTsKK30KKworLSAo
UldJUHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCit7CisgICAgcmV0dXJuIGZyb21Q
cm90b2NvbFN0cmluZzxSV0lQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAiYW5pbWFscyJdKTsKK30KKworLSAodm9pZClzZXRJZGVudGlmaWVyOihOU0ludGVn
ZXIpaWRlbnRpZmllcgoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmlkZW50aWZpZXIgZm9yS2V5
OkAiaWQiXTsKK30KKworLSAoTlNJbnRlZ2VyKWlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gW3N1
cGVyIGludGVnZXJGb3JLZXk6QCJpZCJdOworfQorCistICh2b2lkKXNldFRyZWU6KFJXSVByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp0
cmVlIGZvcktleTpAInRyZWUiXTsKK30KKworLSAoUldJUHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKXRyZWUKK3sKKyAgICByZXR1cm4gKFJXSVByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgKilbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxCisKKy0gKHZvaWQpc2V0T2Jq
OihSV0lQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICopb2JqCit7CisgICAgW3N1cGVyIHNl
dE9iamVjdDpvYmogZm9yS2V5OkAib2JqIl07Cit9CisKKy0gKFJXSVByb3RvY29sVGVzdFJlY3Vy
c2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICByZXR1cm4gKFJXSVByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDIgKilbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl07Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFJXSVByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIKKworLSAodm9pZClz
ZXRPYmo6KFJXSVByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAgICBbc3Vw
ZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoUldJUHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqKW9iagoreworICAgIHJldHVybiAoUldJUHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MSAqKVtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorCisjIyMgQmVnaW4gRmlsZTog
UldJUHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorI2ltcG9ydCAi
UldJUHJvdG9jb2xKU09OT2JqZWN0SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xJ
bnRlcm5hbC5oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>